Текст
                    ЭЛЕКТРОНИКА
М. А. Гладигтснн
М и к р о к о н т р о л л е р ы
смешанного сигнала
семейства C8051Fxxx
фирмы Silicon Laboratories
и их применение
ОДЭКА
djvu АНЮ

Серия «МИРОВАЯ ЭЛЕКТРОНИКА» -мннискояим Гладштейн М. А. МИКРОКОНТРОЛЛЕРЫ СМЕШАННОГО СИГНАЛА C8051Fxxx ФИРМЫ SILICON LABORATORIES И ИХ ПРИМЕНЕНИЕ Руководство пользователя Москва Издательский дом «Додэка-ХХ!» 2008 ОАЭКА
УДК 004.31 ББК 32.973-04 Г52 Гладштейн М. А. Г52 Микроконтроллеры смешанного сигнала C8051Fxxx фирмы Silicon Laboratories и их применение. Руководство пользователя. — М.: Издатель- ский дом «Додэка-ХХ1», 2008. — 336 с.: илл. — (Серия «Мировая электрони- ка»). ISBN 978-5-94120-162-4 Книга содержит краткое описание архитектуры новейших КМОП-микрокон- троллеров смешанного сигнала фирмы Silicon Laboratories. Приводится описание аппаратных и программных средств разработки систем па базе этих микроконтроллеров, включая Интегрированную Среду Разработки, Мастера Конфигурации, а также программного обеспечения фирмы Keil. Рассмотренные вопросы проектирования аппаратного и программного обес- печения включают в себя электрические схемы, алгоритмы и исходные коды, связанные с использованием внутренних цифровых и аналоговых периферий- ных устройств для решения различных задач. Рассмотрены также вопросы записи информации в энергонезависимую память микроконтроллера и применения ко- нечно-автоматных моделей для формализации разработки программного обеспе- чения микроконтроллерных систем. Приводятся примеры построения различных управляющих и измерительных систем на базе описанных микроконтроллеров с использованием технологии «Система на кристалле». Прилагаемый компакт-диск содержит программное обеспечение, оригиналь- ные справочные материалы и исходные коды на языке ассемблера для всех 33 за- дач, рассмотренных в книге. Книга предназначена для инженеров — разработчиков электронной аппара- туры и студентов технических вузов. УДК 004.31 ББК 32.973-04 С разрешения корпорации Silicon Laboratories, Inc. Все права защищены. Никакая часть этого издания не может быть воспроизведена в любой форме или любыми средствами, электронными или механическими, включая фотографирова- ние, ксерокопирование или иные средства копирования или сохранения информации, без письменного разрешения издательства. ISHN 978-5-94120-162-4 © Издательский дом «Додэка-ХХЬ, 2008 ® Серия «Мировая электроника»
Содержание Введение....................................................................5 I чава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx.......11 1.1. Архитектур а процессорного ядра CIP-51.................................И 1.1.1. Структура процессора и логическая организация МК ...............11 1.1.2. Регистры специальных функций................................... 15 1.1.3. Слово состояния программы.......................................16 1.1.4. Система команд процессора.......................................17 1 2. Организация системы памяти............................................23 1.2.1. Память программ.................................................23 1.2.2. Внутренняя память данных........................................26 1.2.3. Внешняя память данных...........................................27 1.2.4. Интерфейс внешней памяти ...................................... 27 I I I >ргапизация ввода/вывода........................................... 31 1.3.1. Схема выходного буфера порта ввода/вывода ......................31 1.3.2. Структура ввода/вывода..........................................32 I <1 (’негема синхронизации................................................36 1.4.1. Внутренний генератор синхронизации .............................37 1.4.2. Внешний генератор синхронизации.................................39 1 1. < ‘шлема сброса.......................................................40 I 5 I. Организация системы сброса......................................41 1 5.2. Унравлсниесторожевымтаймером....................................44 1 Н < шлема прерываний.....................................................45 1 б 1. Логика прерываний...............................................46 1 fi 2 Источники и приоритет прерываний................................48 I ' IVahmi.i уменьшенного потребления энергии.............................50 I I. Режим IDLE........................................................51 I '.2 PcxiimSTOP.......................................................51 IM IiiiiMC|n.i. 52
1.8.1. Таймеры и режимы их работы .........................................52 1.8.2. Программируемый массивсчеттчиков....................................68 1.9. Контроллеры последовательной связш........................................76 1.9.1. Контроллер SM Bus................................................. 76 1.9.2. КонтроллерSP[ ......................................................84 1.9.3. Контроллер IJART................................................... 89 1.10. Аналоговые периферийные устройства.......................................97 1.10.1. Аналого-цифровые преобразователи...................................97 1.10.2. Цифро-аналоговыспрсобразс£>ватели................................ 105 1.10.3. Схема формирования опорного напряжения............................106 1.10.4. Аналоговые компараторы........................................... 108 Глава 2. Средства разработки микроконтроллерных систем на базе МК C8051Fxxx . Ill 2.1. Процесс разработки аппаратных и программных средств систем на базе МК. 112 2.2. Наборы средств проектирования............................................115 2.3. Интегрированная среда разработки ....................................... 116 2.4. Мастер конфигурации МК............................................... 121 2.5. Программное обеспечение фирмы Кеей...................................... 127 2.5.1. Ассемблер А51 .................................................... 127 2.5.2. КомпиляторС51..................................................... 130 2.5.3. Компоновшик BL51 ................................................. 133 2.5.4. БиблиотскарьЫВ51 ................................................. 134 1 лава 3. Проектирование аппаратных и программных средств.................... 135 3.1. Особенности системы команд и приемы программирования.................... 136 3.2. Программирование таймеров............................................... 166 3.3. Обработка прерываний.................................................... 173 3.4. Программирование контроллеров последовательной связи.................... 181 3.5. Управление мощными нагрузками............................................200 3.6. Подключение светодиодных и жидкокристаллических дисплеев.................213 3.7. Подключение клавиатур....................................................223 3.8. Использование аналоговых периферийных устройств..........................246 3.9. Цифровая обработка сигналов..............................................259 3.10. Программирование энсргонсзависи1мой памяти..............................265 3,11. Проектирование алгоритмов управления на основе конечно-автоматных моделей 269 I лава 4. Примеры построения измерителыных и управляющих систем на базе МК SiLabs 272 1.1. Система управления светофорами на1 пешеходном переходе...................272 4.2. Система управления электрическим (бойлером...............................279 4.3. Система управления автоматическими дверями...............................288 4.4. Цифровой вольтметр.......................................................294 Заключение .................................................................. 316 Приложение 1. Включаемый файл ассемблера для МК 8051F020 .................... 317 11риложение 2. Микроконтроллеры смешанного сигнала фирмы Silicon Laboratories .... 322 Литература.................................................................. 328
Введение Большинство создаваемых в наше время технических устройств, начиная от сложнейших объектов космической техники и кончая детскими игрушками, со- держит одну или более так называемых встроенных систем (embedded system) ав- томатического управления. Центральной частью такой системы является электронное управляющее уст- ройство — контроллер (от англ, control — управление), снабженное соответству- ющими входными и выходными каналами, по которым передаются как аналого- вые, так и дискретные (цифровые) сигналы. С момента выпуска фирмой Intel первого микропроцессора 4004 в 1971 г. ста- ло совершенно очевидным, что ядром контроллера должен быть универсальный цифровой процессор. Успехи микроэлектроники в последующие годы позволили разместить на одном кристалле с процессором устройства памяти и порты вво- да/вывода — так появились однокристальные микро-ЭВМ. А развитие теории цифровой обработки сигнала привело к появлению цифровых сигнальных про- цессоров (DSP — Digital Signal Processor). Особенностью однокристальных DSP является наличие аналого-цифрового (АЦП) и цифро-аналогового (ЦАП) преоб- разователей, а также аппаратного умножителя-аккумулятора в составе арифмети- ко-логического устройства. Наличие последнего позволяет резко сократить вре- мя выполнения операции умножения с накоплением суммы произведений, явля- ющейся одной из основных операций алгоритмов цифровой обработки сигнала. И наконец, желание разработчиков оптимизировать массовое производство встроенных систем сформировало концепцию технологии проектирования «Система на кристалле» (System on a Chip) и привело к появлению микроконт- роллеров (МК), т. е. контроллеров встроенных систем, выполненных на одном кристалле. Согласно указанному выше такой МК должен с одинаковым успехом обрабатывать как цифровые, так и аналоговые сигналы, т. е. представлять собой определенный гибрид микро-ЭВМ и DSP. Иначе их называют микроконтролле- рами смешанного сигнала (Mixed Signal Microcontroller).
Введение Типовая структура такого МК с учетом всех современных тенденций имеет вид, показанный на Рис. В.1. Центральным элементом этой структуры является универсальное цифровое процессорное ядро. Наличие встроенного аппаратного умножителя-аккумулятора является серьезным преимуществом такого процессо- ра в случае выполнения алгоритмов цифровой обработки сигнала. Рис. В.1. Типовая структура микроконтроллера смешанного сигнала. Поскольку МК встраивается в объект управления, он вынужден работать в ус- ловиях значительных помех и колебаний питающего напряжения, приводящих к сбоям и временным отказам. Для распознавания таких ситуаций и последующего перезапуска работы микроконтроллера процессорное ядро снабжается специаль- ной подсистемой сброса, содержащей, кроме стандартного входа внешнего сиг- нала сброса, целый ряд блоков контроля вычислительного процесса, формирую- щих сигнал сброса при обнаружении нештатной ситуации. В качестве примеров таких узлов можно привести сторожевой таймер (WatchDog Timer), страхующий МК от «зависания», и детектор пропадания синхронизации (Missing Clock Detector). Вторая подсистема, характерная для процессорного ядра МК — это подсисте- ма синхронизации (см. Рис. В.1). Такая подсистема включает, как правило, два генератора тактового сигнала: «внутренний» низко стабильный генератор для применения в системах, где не требуется точность по времени, и «внешний», с возможностью подсоединения к МК времязадающих элементов. Если в качестве 1акого элемента использовать, например, кварцевый резонатор, то можно с по- мощью МК производить высокоточные временные измерения или высокоточ- ный синтез сигналов. И наконец, третья подсистема — отладочный интерфейс — придает МК очень важное свойство внутрисистемного программирования и отладки (ISP — In System Programming and Debugging) с помощью компьютера и соответствующего програм- много обеспечения (средств разработки).
Введение Использование в сочетании с этим интерфейсом в качестве памяти программ (см. Рис. В.1) МК энергонезависимого запоминающего устройства с электричес- ким стиранием (так называемая флэш-память — flash) позволяет по завершении отладки и отсоединения отладочного интерфейса продолжить функционирова- ние системы в автономном рабочем режиме. Память данных (оперативное запоминающее устройство — ОЗУ) МК может иметь несколько иерархических уровней с разными способами доступа. Часть этой памяти представляет собой так называемые регистры специальных функций (Special Function Registers) и содержит особую информацию, определяющую в том числе и внутреннюю конфигурацию МК. В современных МК число таких ре- гистров может достигать несколько сот. Для расширения функциональных возможностей МК может снабжаться ин- терфейсом внешней памяти, позволяющим дополнительно подключать микро- схемы запоминающих устройств. Кроме того, совершенно очевидно, что в состав МК смешанного сигнала должны входить цифровые и аналоговые периферийные устройства (см. Рис. В.1). Как правило, цифровые устройства представлены таймерами-счетчиками (Timer-Counter), программируемыми массивами счетчиков (Programmable Counter Array) и контроллерами последовательной связи (Serial Communication Controller) различных стандартов (UART, SMBus, SPI, CAN, USB и т. п.). Тайме- ры-счетчики позволяют решать задачи измерения временных интервалов и задачи формирования временных интервалов (например, ШИМ — широтно-импульсная модуляция — широко применяется для управления электродвигателями постоян- ного тока). Контроллеры последовательной связи применяются для построения микросетей из датчиков или исполнительных устройств, а также для подключения встроенной системы к последовательному порту компьютера. Такие микросети позволяют не только уменьшить количество и длину необходимых соединений, но и решить так называемую «проблему выводов» самого кристалла МК. Аналоговые периферийные устройства представлены, как правило, АЦП и ЦАП, а также аналоговыми компараторами. Нередко МК смешанного сигнала снабжают дополнительными устройствами, как, например, встроенным источником опорного напряжения, необходимым для работы АЦП и ЦАП, встроенным датчиком температуры, решающим, в част- ности, задачу температурной компенсации при подключении измерительных ‘гермопар к МК, и т. п. 8-битные МК смешанного сигнала фирмы Silicon Laboratories занимают одно in ведущих мест на рынке электронных компонентов этого типа в силу двух ос- новных преимуществ: • быстродействующее (тактовая частота до 100 МГц) процессорное ядро С1Р- 51, полностью программно совместимое с микроконтроллером фирмы Intel 8051, система команд которого является по сути международным стандартом, под нее разработано множество средств проектирования программ и готовых программ; • широкий набор прецизионных аналоговых периферийных узлов.
Введение Полный перечень всех производимых в настоящее время фирмой Silicon Laboratories МК и их параметры приведены в Приложении 2. Все микроконтрол- леры образуют ряд семейств, имеющих особые свойства. Внутри каждого семейс- тва имеется ряд модификаций, отличающихся количественными параметрами (в первую очередь количеством выводов корпуса). Обозначение каждого микрокон- троллера содержит строку символов “C8051F”, после которых следует трехзнач- ный десятичный номер модификации МК. Базовым является семейство C8051F00x/C8051F01x (здесь и далее символом “х” обозначена последняя цифра модификации МК). МК этого семейства в зави- симости от модификации имеют максимальную производительность 20 или 25 MIPS (Million Instructions per Second — миллионов команд в секунду), флэш-па- мять программ объемом 32 или 16 Кбайт, память данных (ОЗУ) объемом 256, 1280 или 2304 байта, 8, 16 или 32 линии цифрового ввода/вывода, контроллеры после- довательного интерфейса UART, SMBus, SPI, четыре 16-битных таймера, 5-ка- нальный программируемый массив счетчиков, внутренний генератор тактового сигнала со стабильностью ±20% и максимальной частотой 16 МГц, 10- или 12- битный 8- или 4-канальный АЦП с максимальной скоростью преобразования до 100 тысяч выборок в секунду, два 12-битных ЦАП, встроенный датчик температу- ры, источник опорного напряжения и 2 аналоговых компаратора с программиру- емым гистерезисом. Наиболее функционально полным представителем этого се- мейства является MKC8051F005. Дальнейшим расширением базового семейства являются микроконтроллеры семейства C8051F02x, которые содержат память программ и данных увеличенно- го объема (64 Кбайта и 4352 байта соответственно) плюс интерфейс внешней па- мяти, до 64-х линий цифрового ввода/вывода, дополнительный второй UART, до- полнительный пятый таймер и дополнительный второй 8-битный 8-канальный АЦП с максимальной скоростью преобразования до 500 тысяч выборок в секунду (см. Приложение 2). Наиболее функционально полным представителем этого се- мейства является МК С8051F020. Семейство C805lF04x является следующим шагом развития МК — в нем до- полнительно имеется контроллер последовательного интерфейса CAN2.0B, ко- личество каналов программируемого массива счетчиков увеличено до 6, частота внутреннего генератора тактового сигнала повышена до 24.5 МГц, а его стабиль- ность улучшена до ±2%, количество каналов главного АЦП увеличено до 13, ко- личество аналоговых компараторов — до трех, а усовершенствованный входной усилитель позволяет подключать к МК аналоговые сигналы амплитудой до +60 В (см. Приложение 2). Наиболее функционально полным представителем этого се- мейства является MKC8051F040. Еще более усовершенствованным является семейство С8051 F06x: два однока- нальных АЦП имеют разрешение 16 бит и обеспечивают скорость преобразова- ния до 1 миллиона выборок в секунду, имеется контроллер прямого доступа к па- мяти (ПДП), а скорость преобразования третьего 10-битного 8-канального АЦП составляет 200 тысяч выборок в секунду (см. Приложение 2). Наиболее функцио- нально полным представителем этого семейства является МК C8051F060.
Введение Другое направление совершенствования МК, ориентированное на задачи цифровой обработки сигнала, представлено семейством C8051F12x/C8051F13x. Для этих МК характерны большие объемы памяти программ и данных (до 128 Кбайт и 8448 байт), а также производительность процессорного ядра до 50 и 100 MIPS и наличие на кристалле аппаратного умножителя-аккумулятора 16 х 16 бит (см. Приложение 2). Наиболее функционально полным представителем этого се- мейства является MKC8051F120. Направление миниатюризации и удешевления МК представлено семейства ми «малого» класса. Прежде всего это семейство С8051 F2xx, представители кото- рого по сравнению с базовыми модификациями МК имеют уменьшенный объем памяти программ (8 Кбайт), сокращенный набор контроллеров последовательно- го интерфейса и меньшее количество таймеров, однако число коммутируемых ка- налов АЦП увеличено до 32 (см. Приложение 2). Наиболее функционально пол- ным представителем этого семейства является МК C8051F206. Это же направление представлено и в сверхминиатюрном семействе C'8051F30x, представители которого имеют память программ 8, 4 или 2 килобай га, память данных — только 256 байт и всего 8 линий ввода/вывода, однако эти МК используют на печатной плате установочную площадку размером всего 3 хЗ мм2 (см. Приложение 2). Наиболее функционально полным представителем это । о семейства является МК С8051F300. Наиболее мощным среди малогабаритных МК следует признать семейство C8U51F31X, представители которого имеют такой же набор контроллеров после шницельного интерфейса и таймеров-счетчиков, что и базовое семейство ('8051 FOOx, однако имеют более быстродействующий АЦП с увеличенным коли честном каналов и более точный внутренний генератор тактового сигнала (см. Приложение 2). Наиболее функционально полным представителем этого семейс- ih:i является MKC8051F310. На базе последнего семейства построены МК с контроллером последователь- ною интерфейса USB 2.0: C8051F320/1 и С8051F326/7. Эти МК имеют еще более очный (±1.5%) внутренний генератор тактового сигнала и усовершенствования и I истеме питания (см. Приложение 2). Семейство C8051F33x является дальнейшим развитием сверхминиатюрного |.гмсйстпа C8051F30x. МК этого семейства имеют ОЗУ увличенного объема (768 ftain ), большее количество линий ввода/вывода (17), более широкий набор циф ропых периферийных узлов, более точный АЦП. Кроме того, в этом семействе iiMrioiCH дополнительные усовершенствования: ЦАП с токовым выходом и до но'1Цнтсльный низкочастотный внутренний генератор с частотой до 10 КГц для мпьромощных применений (см. Приложение 2). Наиболее функционально пол ним представителем этого семейства является МК C8051F330. Этот МК имеет и «lii’Hii.uii.iiyio версию в корпусе типа PDIP, удобном для макетирования, — ( 80511 33OD. ( смепсгво C8O51F34x является усовершенствованным семейством МК с ип и рфейсом USB 2.0 (C8O51F32x). В этих МК увеличено быстродействие ироцес- »ор|ццо ядра, увеличен объем памяти программ и данных, а также имеется ин гер-
Введение фейс внешней памяти (см. Приложение 2). Наиболее функционально полным представителем этого семейства является МК C8051F340. Семейство C8051F35x по объему памяти и количеству выводов вполне можно отнести к «малогабаритному» классу МК, однако отличительными особенностя- ми этого семейства являются высокая производительность (50 MIPS) и наличие 8-канального прецизионного (16 и даже 24 бита) сигма-дельта АЦП со скоростью преобразования 1 тысяча выборок в секунду с широкодиапазонным (1...128) про- граммируемым усилителем на входе (см. Приложение 2). Наиболее функцио- нально полным представителем этого семейства является МК С8051F350. И наконец, последняя разработка фирмы — семейство C8051F41X, которое со- четает высокую производительность, значительный объем памяти и малые габа- риты. Кроме того, МК этого семейства содержат 12-битные АЦП (до 24 каналов, скорость преобразования — 200 тысяч выборок в секунду), ЦАП (с токовым вы- ходом) плюс встроенный стабилизатор напряжения питания и часы реального времени с батарейной поддержкой (см. Приложение 2). Наиболее функциональ- но полным представителем этого семейства является МК C8051F410. Таким образом, фирма Silicon Laboratories предоставляет разработчику широ- кую гамму микроконтроллеров, среди которых всегда можно выбрать оптималь- ный для конкретных условий применения. Фирма также снабжает разработчика удобными средствами разработки и качественной технической документацией. Цель настоящей книги — помочь читателю изучить архитектурное построение микроконтроллеров C8051Fxxx, ознакомиться со средствами проектирования и освоить основные приемы программирования микроконтроллеров для выполне- ния заданных функций. Справочные данные, приведенные в книге, являются да- леко не полными и никоим образом не заменяют оригинальные справочные ма- териалы фирмы Silicon Laboratories. Книга рассчитана на подготовленного чита- теля, знакомого с основами вычислительной техники. При подготовке книги автором был использован его опыт по преподаванию учебного курса «Микроконтроллеры» в Рыбинской государственной авиацион- ной технологической академии в 1991—2001 гг. (г. Рыбинск, Россия) и в Инженер- ном академическом колледже ОРТ Брауде в 2002—2007 гг. (г. Кармиэль, Израиль). Поэтому формат и последовательность изложения материала отличаются от при- нятого в фирменных технических документах, использованных при подготовке рукописи. При написании книги в качестве основной литературы была использо- вана оригинальная документация, размещенная на сайте www.silabs.com, поэтому в списке литературы указаны только другие источники информации, ссылки на которые имеются в тексте. Книга публикуется с официального разрешения фир- мы Silicon Laboratories, однако она не несет никакой ответственности за досто- верность материалов. В приложенном к настоящей книге компакт-диске содержатся программные средства разработки для микроконтроллеров С8051 Fxxx, оригинальная техничес- кая документация (справочные данные и заметки по применению) и исходные файлы примеров программирования, описанных в книге.
Архитектура микроконтроллеров смешанного сигнала C8051Fxxx В качестве основной модификации МК для первоначального изучения целс- инюразно выбрать C8051F020, так как он представляет собой наиболее совер- uii'iiiiv№ версию базового варианта. После подробного ознакомления с этим МК ниппель сможет самостоятельно ознакомиться с теми усовершенствованиями, mmipi.ie были сделаны в последующих разработках МК. 1.1 Архитектур а процессорного ядра CIP-51 1,1.1. Структура процессора и логическая организация МК Процессор CIP-51 имеет одноадресную (аккумуляторную) архитектуру. • «руктура процессора (Рис. 1.1) содержит операционное и управляющее устройс- тв Центральной частью операционного устройства является арифметико-логи иц »oi’ устройство —АЛУ сдвумя входами: первогои второго операндов, поступа •inii'> через регистры временного хранения ТМР1 и ТМР2 (temporary - времен- inill) Источником первого операнда и местом сохранения результата для <||||>|>мс|||ческнх и логических операций служит аккумулятор А. Признаки pe- ll'и она операций (флаги) сохраняются в регистре PSW (Program Status Word — I 'Ikihi Состояния Программы). Команды умножения и деления используют до- н । ниш и.цо регистр В, который другими командами может быть использован Hi* Г» ИI регистр общего назначения (GPR - General Purpose Register). Другие l‘i ill и шкже ячейки сверхоперативной, так называемой внутренней памяти раз- Mniviim и статическом ОЗУ — SRAM (Static Random Access Memory), доступ к ко- fbp<nl in у nice i паяется через регистр адреса SRAM. В этой же памяти размещен и nt рхушку которого всегда определяет указатель стека — SP (Stack Pointer), lit. hi речпслсиные регистры и ячейки SRAM имеют размер 8 биг.
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx ШИНА ДАННЫХ е CLOCK SFRADDRESS SFRCONTROL SFR WRITE DATA SFRREADDATA MEM ADDRESS MEMCONTRDL MEM WRITE DATA MEM READ DATA RESET SYSTEM JRQs EMULATIONIRQ STOP IDLE Интерфейс прерываний Регистр управления режимами энергопотребления Рис. 1.1. Структура процессора CIP-51. | ТМР2 | PSW АЛУ SRAM (256X8) БУФЕР DPTR Инкрементатор PC Регистр адреса памяти Логика управления ШИНА ДАННЫХ Интерфейс шины регистров SFR Интерфейс памяти $ Центральной частью управляющего устройства процессора является 16-бит- ный программный счетчик — PC (Program Counter), снабженный инкрементато- ром для поддержания естественного порядка следования команд. Второй 16- битный регистр DPTR (Data Pointer) является указателем данных, т. е. предна- значен для хранения адреса данных, размещаемых в так называемой внешней памяти данных или в памяти программ МК. Третий 16-битный регистр Буфер (Buffer) недоступен для программиста и предназначен для временного хранения адресов переходов, содержащихся в командах переходов и вызовов подпро- грамм. Все три указанных 16-битных регистра через регистр адреса памяти име- ют выход на интерфейс памяти, к которому подключена память программ и вне шняя память данных. Интерфейс памяти имеет все необходимые шины для осу ществления операций чтения и записи: шину адреса MEM_ADDRESS, шину
1.1. Архитектур а процессорного ядра CIP-51 управления MEMCONTROL, выходную шину данных MEMWRITEDATA и входную шину данных MEMREADDATA. Информацией внешней памяти данных интерфейс обменивается с внутренней шиной данных процессора, а ко- манды из памяти программ поступают через интерфейс на конвейер команд и далее на логику управления. Блок логики управления представляет собой конеч- ный автомат, начальное состояние которого задается сигналом сброса RESET, а синхронизация осуществляется тактовыми импульсами CLOCK. Выходные сиг- налы этого блока управляют всеми элементами процессора, обеспечивая считы- вание и исполнение команд с использованием конвейера для повышения произ- водительности. Важнейшей частью МК являются также регистры специальных функций — SI R (Special Function Register), содержащие информацию, определяющую кон- фи! урацию всех подсистем МК, и предназначенные для хранения данных пери- ферийных узлов МК. Для доступа к этим регистрам используется специальный интерфейс шины регистров SFR, имеющий все необходимые шины для осущест- вления операций чтения и записи этих регистров: шину адреса SFR ADDRESS, шину управления SFR CONTROL, выходную шину данных SFRWRITEDATA и входную шину данных SFR READ DATA. Каждый регистр специальных функ- ции имеет свой адрес в адресном пространстве SFR, там же размещаются и выше- упомянутые регистры процессора, к которым имеется доступ со стороны про- i рдммы. Как любой серьезный процессор, МК имеет интерфейс прерываний, обраба- 1ЫН1ПО1ЦИЙ запросы прерываний — IRQ (Interrupt Request), генерируемые аппа- pniiKi (SYSTEM IRQs) или программно (EMULATIONIRQ). Кроме стандартного режима выполнения программы RUN МК может рабо- inn.ii режимах уменьшенного энергопотребления: холостого хода — IDLE и оста- iiniiii STOP. Управление этими режимами осуществляет регистр управления ре- «Ц1МПМЦ энергопотребления с помощью одноименных управляющих сигналов. По сравнению с классическим МК Intel 8051, в котором все команды, за ис- * ннченнем команд умножения и деления, требовали для своего выполнения от I ’ 'io 24 периодов синхронизации, а максимальная тактовая частота ограничива- ть ь шачением 12 МГц, CIP-51 выполняет 70% команд за 1 или 2 периодасинхро- пн шпни, самая длинная команда требует 8 периодов, а максимальная тактовая 'ив нна составляет от 25 (для C8051F020) до 100 МГц (для некоторых модифика- ции МК). -)то позволяет процессору CIP-51 достигать высокой производитсяь- 1ИН И) ил относительно невысоких частотах синхронизации. Ilin пчсская организация МК C8051F020 приведена на Рис. 1.2. Логически МК Ilin ipncii из четырех типовых блоков: процессора, памяти данных, отдельной па- нн । и iipoi рамм (так называемая Гарвардская архитектура) и блока ввода/вывода. II гпс!аве процессора, кроме упомянутых выше аккумулятора АСС, регистра I* . in>11.1 состояния программы PSW, указателя стека SP, указателя данных DPTR, fltiiii’iaexi! разделенного на две 8-битные части: старшую DPH (high — высокий) и Uhinii\|<i 1)1’1 (low — низкий), и программного счетчика PC, входят четыре рабо 'Hit Гншка pci Негров: банк 0, банк 1, банк 2 и банк 3. Каждый из банков содержи) |Н И pi’i негров: R0...R7.
Ввод/вывод | РЗ I I P7 I P2 | | P6 I PI I I P5 I I P0 । । P4 । Рис. 1.2. Логическая организация МК. Глава 1. Архитектура микроконтроллеров смешанного сигнала С8051Гххх
1.1. Архитектур а процессорного ядра CIP-51 Память данных разделена на четыре логических сегмента: BIT, DATA, I DATA и XDATA. Сегмент BIT, как это следует из его названия, предназначен для хране- ния булевых переменных. Его предельный объем — I28 бит, допустима только прямая адресация операндов с адресами от ООН до 7FH. Сегмент DATA имеет объем до 128 байт, допустима только прямая адресация операндов с адресами от ООН до 7FH, а старшие 128 адресов, начиная с 80Н и кончая FFH, зарезервирова- ны для обращения к регистрам специальных функций. Сегмент IDATA может иметь объем до 256 байт, однако здесь допустима только косвенная адресация (Indirect — косвенный). Из Рие. 1.2 видно, что в качестве указателя могут высту- пать только регистры R0 и R1 активного банка регистров или указатель стека SP. Последнее свидетельствует о том, что именно в этом логическом сегменте разме- щен стек МК. СегментXDATA — сегмент внешней памяти (external — внешний), его объем может составлять до 64 Кбайт, однако на кристалле МК C8051F020 имеется так называемое «внешнее» ОЗУ объемом только 4 Кбайта (конечный ад- рес 0FFFH). Через интерфейс внешней памяти можно подключить память дан- ных объемом до 64 Кбайт. Из Рис. 1.2 видно, что для этого сегмента допустима только косвенная адресация с полным адресом при использовании 16-битного указателя данных DPTR или косвенная страничная адресация при использова- нии как указателя одного из 8-битных регистров R0 или R1, при этом все адрес- ное пространство будет содержать 256 страниц, из которых первые 8 могут нахо- диться физически на кристалле МК, а остальные — снаружи. Память программ образует логический сегмент с именем CODE, объемом до 64 Кбайт. Именно отсюда процессор считывает команды, используя в качестве указателя программный счетчик PC. Из Рис. 1.2 видно, что есть возможность косвенной адресации к памяти программ с помощью указателя данных DPTR. В режиме чтения эта возможность используется для считывания таблиц постоян- ных данных, хранимых в памяти программ, а в режиме записи — для загрузки программных кодов в процессе отладки программ. Блок ввода/вывода содержит восемь 8-битных портов Р0...Р7. Следует отметить, что все логические элементы МК, выделенные серой за- ливкой, физически размещаются во внутренней памяти данных, объемом 256 байт, все выделенные регистры и порты ввода/вывода имеют прямые адреса в массиве адресов регистров специальных функций. 1.1.2. Регистры специальных функций МК C8051F020 имеет 122 регистра специальных функций. Прямой адрес лю- бого из этих регистров можно определить из адресной карты, показанной в Гибл. 1.1. Для определения шестнадцатеричного адреса надо взять первую цифру номера строки (указан слева) и добавить цифру номера колонки, на пересечении которых размещен соответствующий регистр. Причем, если строка обозначена номером, оканчивающимся на 0, надо взять номер колонки без скобок, если — на 8, то надо взять символ в скобках. Например, адрес регистра SP будет 81Н, а адрес pci негра TL0 будет 8АН.
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx Таблица 1.1. Адресная карта регистров специальных функций F8 SPI0CN РСАОН РСАОСРНО PCA0CPHI РСА0СРН2 РСАОСРНЗ РСА0СРН4 WDTCN F0 В SCONI SBUF1 SADDR1 TL4 ТН4 EIP1 EIP2 Е8 ADC0CN PCA0L PCA0CPL0 PCA0CPL1 PCA0CPL2 PCA0CPL3 PCA0CPL4 RSTSRC ЕО АСС XBR0 XBR1 XBR2 RCAP4L RCAP4H EIE1 EIE2 D8 PCA0CN PCA0MD РСАОСРМО PCA0CPMI РСА0СРМ2 РСАОСРМЗ РСА0СРМ4 DO PSW REF0CN DAC0L DAC0H DAC0CN DAC1L DACIH DAC1CN С8 T2CON T4CON RCAP2L RCAP2H TL2 ТН2 SMB0CR СО SMB0CN SMB0STA SMB0DAT SMB0ADR ADC0CTL ADC0CTH ADC0LTL ADC0LTH В8 IP SADEN0 AMX0CF AMX0SL ADC0CF P1MDIN ADC0L ADC0H ВО РЗ OSCXCN OSCICN P74OUT FLSCL FLACL А8 IE SADDR0 ADC1CN ADC1CF AMXISL P31F SADEN1 EMI0CN АО Р2 ЕМ 10ТС EMI0CF POMDOUT P1MDOUT P2MDOUT P3MDOUT 98 SCONO SBUFO SP10CFC SPI0DAT ADCI SPI0CKR CPT0CN CPT1CN 90 Р1 TMR3CN TMR3RLL TMR3RLH TMR3L TMR3H Р7 88 TCON TMOD TL0 TL1 ТНО TFH CKCON PSCTL 80 РО SP DPL DPH Р4 Р5 Р6 PCON 0(8) 1(9) 2(A) 3(B) 4(C) 5(D) 6(E) 7(F) Бит-адресуемые регистры Все регистры, адрес которых оканчивается на 80Н или 88Н, являются бит-ад- ресуемыми, т. е. каждый двоичный разряд имеет битовый адрес, причем этот ад- рес лежит в диапазоне 80H...FFH, являющемся продолжением диапазона адресов сегмента BIT (см. Рис. 1.2). Этот адрес строится по следующей схеме: ауабЭзадазЬгЬ^о, где а7а6а5а4аз — старшие пять бит адреса бит-адресуемого регистра; ЬгЬ^о— номер бита (справа налево, начиная с 0). Так, например, адрес 5-го бита аккумулятора АСС.5 будет Е5Н, а адрес 3-го бита регистра TC0N.3 будет 8ВН. Расшифровку аббревиатур имен регистров специальных функций и их битов можно уточнить по тексту включаемого файла (язык ассемблера), приведенного в Приложении 1. 1.1.3. Слово состояния программы Слово состояния программы сохраняется в регистре PSW и включает флаги переноса CY (carry), дополнительного переноса AC (auxiliary carry), переполне- ния OV (overflow), паритета Р (parity), два флага пользователя F0 и FI, а также би- ты выбора банка регистров RSI и RSO (register bank select). Полная информация об этом регистре приведена на Рис. 1.3.
1.1. Архитектур а процессорного ядра CIP-51 R/W R/W R/W R/W R/W R/W R/W R CY 1 АС 1 FOj RSI RS0 OV 1 F1 I Р I Значение после сброса: Адрес SFR: D0H 1 о 0 0 0 0 0 1 о I о I Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 БитО Рис. 1.3. Регистр слова состояния программы (PSW). Бит 7 CY — флаг переноса. Устанавливается, если в последней арифметической операции имел место перенос (сложение) или заем (вычитание), и обнуляется в про- тивном случае. Бит 6 АС — флаг дополнительного переноса. Устанавливается, если в последней арифметической операции имел место перенос в старший нибл (сложение) или заем из старшего нибла (вычитание), и обнуляется в противном случае. Бит 5 F0 — флаг пользователя 0. Бит-адресуемый флаг общего назначения для использования под уп- равлением программы. Биты 4, 3 RSI, RS0 — биты выбора банка регистров. RS1 RS0 Банк регистров 0 0 0 0 1 1 I 0 2 I 1 3 Би г 2 OV — флаг переполнения. Устанавливается, если имело место переполнение при сложении или вычитании чисел со знаком, а также при умножении и делении, и обну- ляется в противном случае. Би г 1 FI — флаг пользователя 1. Бит-адресуемый флаг общего назначения для использования под уп- равлением программы. Бит 0 Р — флаг паритета. Устанавливается, если сумма восьми бит аккумулятора нечетна, и обну- ляется, если четна. 1.1.4. Система команд процессора Система команд процессора CIP-51 насчитывает 111 команд. Краткое описа ние системы команд приведено в Табл. 1.2. Для каждой команды указана мнемо- ника, описание операции, выполняемой командой, а также указано количество Гшйювдля каждой команды и время выполнения в циклах частоты синхрониза инн В конце таблицы расшифрованы условные обозначения регистров, опсран л<ш н методов адресации.
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx Таблица 1.2. Система команд Мнемоника Описание Количество байтов Количество циклов АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ ADD A,Rn Сложение регистра с А 1 I ADD A,direct Сложение прямо адресованного байта с А 2 2 ADD A,@Ri Сложение косвенно адресованного байта с А 1 2 ADD A,#data Сложение непосредственно байта с А 2 2 ADDCA,Rn Сложение регистра с А и переносом 1 1 AD DC A,direct Сложение прямо адресованного байта с А и переносом 2 2 ADDCA,@Ri Сложение косвенно адресованного байта с А и переносом 1 2 ADDC A,#data Сложение непосредственно байта с А и переносом 2 2 SUBBA,Rn Вычитание регистра из А с заемом 1 1 SUBB A,direct Вычитание прямо адресованного байта из А с заемом 2 2 SUBBA,@Ri Вычитание косвенно адресованного байта из А с заемом 1 2 SUBB A,#data Вычитание непосредственно байта из А с заемом 2 2 INCA Инкремент А 1 1 INC Rn Инкремент регистра 1 1 INC direct Инкремент прямо адресованного байта 2 2 INC@Ri Инкремент косвенно адресованного байта I 2 DECA Декремент А 1 1 DEC Rn Декремент регистра I 1 DEC direct Декремент прямо адресованного байта 2 2 DEC@Ri Декремент косвенно адресованного байта 1 2 INC DPTR Инкремент указателя данных 1 I MULAB Умножение А на В I 4 DIV AB Деление А на В 1 8 DA A Десятичная коррекция А I 1 ЛОГИЧЕСКИЕ ОПЕРАЦИИ ANLA.Rn Логическое И регистра с А I 1 ANL A,direct Логическое И прямо адресованного байта с А 2 2 ANLA,@Ri Логическое И косвенно адресованного байта с А 1 2 ANL A,#data Логическое И непосредственно байта с А 2 2 ANL direct, A Логическое И А с прямо адресованным байтом 2 2 ANL direct,#data Логическое И непосредственно байта с прямо адресованным байтом 3 3 ORL A,Rn Логическое ИЛИ регистра с А 1 1 ORL A.dircct Логическое ИЛИ прямо адресованного байта с А 2 2 ORI A.GRi Логическое ИЛИ косвенно адресованною баша с А 1 2
1.1. Архитектур а процессорного ядра CIP-51 (продолжение) Таблица 1.2. Система команд Мнемоника Описание Количество байтов Количество циклов ORL A,#data Логическое ИЛИ непосредственно байта с A 2 2 ORL direct,А Логическое ИЛИ А с прямо адресованным байтом 2 2 ORL direct, #data Логическое ИЛИ непосредственно байта с прямо адресованным байтом 3 3 XRLA.Rn Исключающее ИЛИ регистра с А 1 1 XRL A,direct Исключающее ИЛИ прямо адресованного байта с А 2 2 XRLA,@Ri Исключающее ИЛИ косвенно адресованного байта с А I 2 XRL A,#data Исключающее ИЛИ непосредственно байта с А 2 2 XRL direct,A Исключающее ИЛИ А с прямо адресованным байтом 2 2 XRL direct, #data Исключающее ИЛИ непосредственно байта с прямо адресованным байтом 3 3 CLRA Очистка А 1 1 CPLA Инвертирование А 1 1 RLA Циклический сдвиг А влево 1 1 RLCA Циклический сдвиг А влево через перенос I 1 RRA Циклический сдвиг А вправо I 1 RRCA Циклический сдвиг А вправо через перепое I 1 SWAP A Обмен ниблов в А I 1 ПЕРЕСЫЛКА ДАННЫХ MOVA.Rn Пересылка pel истра в А 1 I MOV A,direct Пересылка прямо адресованного байта в А 2 2 MOVA,@Ri Пересылка косвенно адресованного байта в А I 2 MOVA,#data Пересылка непосредственно байта в А 2 2 MOV Rn,A Пересылка А в регистр I 1 MOV Rn,direct Пересылка прямо адресованного байта в регистр 2 2 MOV Rn,#data Пересылка байта непосредственно в регистр 2 2 MOV direct, A Пересылка А в прямо адресованный байт 2 2 MOVdirect,Rn Пересылка регистра в прямо адресованный байт 2 2 MOVdirect,direct Пересылка прямо адресованного байта в прямо адресованный байт 3 3 MOVdirect,@Ri Пересылка косвенно адресованного байта в прямо адресованный байт 2 2 MOVdirect,#data Пересылка непосредственно байта в прямо адресованный байт 3 3 MOV@Ri,A Пересылка А в косвенно адресованный байт 1 2 MOV@Ri,direct Пересылка прямо адресованного байта в косвенно адресованный байт 2 2 MOV @Ri,#data Пересылка непосредственно байта в косвенно адресованный байт 2 2 MOV Di’TR,#datal6 Загрузка указатели данных 16-битной коне гаи гой 3 3
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx (продолжение) Таблица 1.2. Система команд Мнемоника Описание Количество байтов Количество циклов MOVC A,@A+DPTR Пересылка байта из памяти программ относительно DPTRbA I 3 MOVCA,@A+PC Пересылка банта из памяти программ относительно PC в А I 3 MOVXA,@Ri Пересылка байта из внешней памяти данных в А (8-битный адрес) 1 3 MOVX @Ri,A Пересылка А во внешнюю память данных (8-битный адрес) 1 3 MOVXA,@DPTR Пересылка байта из внешней памяти данных в А (16-битный адрес) I 3 MOVX@DPTR,A Пересылка А во внешнюю память данных (16-битный адрес) 1 3 PUSH direct Загрузка прямо адресованного байта в стек 2 2 POP direct Извлечение прямо адресованного байта из стека 2 2 XCH A,Rn Обмен регистра с А 1 1 XCH A,direct Обмен прямо адресованного байта с А 2 2 XCH A,@Ri Обмен косвенно адресованного байта с А 1 2 XCHDA,@Ri Обмен младшей тетрады косвенно адресованного байта с А 1 2 ОБРАБОТКА БИТОВ CLRC Очистка переноса 1 1 CLR bit Очистка прямо адресованного бита 2 2 SETBC Установка переноса 1 I SETBbit Установка прямо адресованного бита 2 2 CPLC Инвертирование переноса 1 1 CPLbit Инвертирование прямо адресованного бита 2 2 ANLC.bit Логическое И прямо адресованного бита и переноса 2 2 ANLC,/bit Логическое И инверсии прямо адресованного бита и переноса 2 2 ORLC.bit Логическое ИЛ И прямо адресованного би га и переноса 2 2 ORL C,/bit Логическое ИЛИ инверсии прямо адресованного бита и переноса 2 2 MOVC,bit Пересылка прямо адресованного бита в перенос 2 2 MOVbit.C Пересылка переноса в прямо адресованный бит 2 2 JC rd Переход, если перенос равен 1 2 2/3 JNC rd Переход, если перенос равен 0 2 2/3 IB id Переход, сели прямо адресованный бит равен 1 2 3/4 INI! rel I к'рсход, если прямо илрссопанный бп г ранен 0 2 3/4 UK l»I i< l 1 il pVHd 1. Cl III Примо | (решилипип он I ранен I И иЧ1К 1 МИЛИ и 3 3/4
1.1. Архитектур а процессорного ядро CIP-51 Таблица 1.2. Система команд (продолжение) Мнемоника Описание Количество байтов Количество циклов ПРОГРАММНЫЕ ВЕТВЛЕНИЯ ACALL addrl 1 Абсолютный вызов подпрограммы 2 3 LCALL uddrl 6 Длинный вызов подпрограммы 3 4 RET Возврат из подпрограммы 1 5 RETI Возврат из подпрограммы обработки прерывания 1 5 AJMP addrl 1 Абсолютный переход 2 3 UMP addr!6 Длинный переход 3 4 SJMP rel Короткий переход (относительный адрес) 2 3 JMP@A+DPTR Косвенный переход относительно DPTR 1 3 JZ rel Переход, если А равен нулю 2 2/3 JNZ rel Переход, если А нс равен нулю 2 2/3 CJNE A,direct,rcl Сравнение прямо адресованного байта и А и переход, если не равно 3 3/4 CJNE A,#data,rel Сравнение непосредственно байга и А и переход, если нс равно 3 3/4 CJNE Rn,#data,rel Сравнение непосредственно байта и регистра и переход, если не равно 3 3/4 CJNE @Ri,#data,rel Сравнение непосредственно байта и косвенно адресуемого байта и переход, если не равно 3 4/5 DJNZ Rn,rel Декремент регистра и переход, если не равно нулю 2 2/3 DJNZ direct.rel Декремент прямо адресованного байта и переход, если не равно нулю 3 3/4 NOP Нет операции 1 1 Примечание. Условные обозначения регистров, операндов и методов адресации: Rn — регистры R0...R7 выбранного регистрового банка. @Ri — ячейка внутренней памяти данных, косвенно адресуемая через регистры R0...R1. rel — 8-битное знаковое смещение (в дополнительном коде) относительно первого байта следующей команды. Используется командой SJMP и всеми командами условных переходов. direct — 8-битный адрес внутренней памяти данных. Это может быть адрес прямо адресуемой ячейки памяти (00H...7FH) или адрес регистра специальных функций (80H...FFH). #data — 8-битная константа. #ihta!6 — 16-битная константа. bit — прямо адресуемый бит внутренней памяти данных или регистра специальных функций, uddrl I — 11-битный адрес, используемый командами ACALL и AJUMR Этот адрес должен быть внутри 2-Кбайтной страницы памяти программ и является первым байтом следующей команды. nddr!6 — 16-битный адрес, используемый командами LCALL и UUMR Этот адрес может быть любым внутри 64-Кбайтного адресного пространства памяти программ. Г шнст венный неиспользованный код операции (0A5h) выполняет тс же действия, что и команда NOI’. Н..с мнемоники © Intel Corporation 1980.
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx Система команд содержит пять групп команд: арифметические операции, ло- гические операции, операции пересылки данных, операции обработки битов и программные ветвления. В группе команд арифметических операций представлены операции сложе- ния, сложения с переносом, вычитания с заемом (простого вычитания нет!), ин- кремента, декремента, умножения, деления и десятичной коррекции после сло- жения. Все эти операции производятся над байтовыми операндами. Операнды операций умножения и деления размещаются в регистрах А и В, в этой же паре регистров записывается и результат. После умножения старший байт двухбайтно- го произведения размещается в регистре В, а младший — в регистре А. После де- ления А на В частное размещается в регистре А, а остаток — в В. Кроме того, в этой группе команд есть одна 16-битная операция — инкремент указателя данных INC DPTR. В группе команд логических операций представлены логические операции И, ИЛИ, исключающее ИЛИ, очистка и инвертирование аккумулятора, а также циклические сдвиги аккумулятора влево и вправо, как простые, так и сдвиги че- рез перенос. В эту группу включена также команда свопинга аккумулятора SWAP А, позволяющая менять местами старший и младший ниблы (nibble -по- лубайт) аккумулятора, что очень удобно для алгоритмов обработки двоично-де- сятичных кодов. В группе команд пересылки данных имеются команды пересылки данных между ячейками внутренней памяти данных (MOV), между аккумулятором и ячейками внешней памяти данных (MOVX), пересылки из памяти программ в аккумулятор (MOVC). Имеется также команда MOV DPTR,#datal6, позволяю- щая производить загрузку 16-битного указателя данных. Кроме того, в эту группу включены команды загрузки и извлечения стека и команды обмена операндами, среди которых одна из команд (XCHD A,@Ri) предназначена для обработки двоично-десятичных кодов и производит обмен только младших ниблов. Группа команд обработки битов включает команды очистки, установки и ин- вертирования битов, логические операции И, ИЛИ, пересылки битов и коман- ды условных переходов по состоянию битов. Особая команда JBC bit,rel позво- ляет выполнить одновременно условный переход и очистку бита, что очень удобно для обработки флагов. Следует отметить, что роль аккумулятора в двухо- перандных битовых операциях играет бит переноса (в мнемонике команды он обозначается как С). Группа команд программных ветвлений содержит команды вызова и возврата из подпрограмм (в том числе из подпрограмм обработки прерываний), команды безусловных и условных переходов, а также комплексные команды: сравнения и условного перехода, декремента и условного перехода — удобные для организа- ции циклов. И наконец, в составе команд имеется «холостая» команда NOP — нет опера- ции.
1.2. Организация системы памяти Существенным моментом для про- граммирования МК на языке ассемблера является знание порядка установки фла- гов после выполнения арифметических и логических операций. Эта информация приведена в Табл. 1.3. Из таблицы следу- ет, что все три указанных флага устанав- ливаются только после операций сложе- ния и вычитания (обозначено символом X). Операции умножения и деления ока- зывают влияние только на два флага, причем флаг переноса всегда сбрасывает- ся, а флаг переполнения при умножении устанавливается, если размер произведе- ния больше байта (т. е. содержимое ре- гистра В после операции не равно нулю), а при делении — когда делитель равен О, т. е. содержимое регистра В до выполне- ния операции равно 0. Остальные ука- 1анные в Табл. 1.3 команды влияют толь- ко на флаг переноса. Прочие команды не изменяют состояния флагов. Что касает- ся флага паритета Р, то он постоянно ус- танавливается в соответствии с содержи- мым аккумулятора. Таблица 1.3. Команды, влияющие иа флаги Команда Флаг CY OV AC ADD X X X AD DC X X X SUBB X X X MUL 0 X DIV 0 X DA X RRC X RLC X CJNE X SETBC I CLRC 0 CPLC X ANL C,bit X ANLC,/bit X ORL C,bit X ORL C,/bit X MOVC,bit X Примечание. На состояние флагов также влияют операции над регистром специаль- ных функций с адресом 208 и операции над битами с адресами 209...215 (это penicip PSW и его биты). 1.2. Организация системы памяти Система памяти МК состоит из памяти программ, внутренней памяти данных и внешней памяти данных. 1.2.1. Память программ Флэш-память программ в основном предназначена для считывания кодов программы и постоянных данных, загруженных через отладочный интерфейс. Однако путем установки специального бита разрешения записи программной па миги PSWE (Program Store Write Enable) можно производить запись информации 0 ячейки программной памяти с помощью команды MOVX. Следует отметить, что процессу записи должен обязательно предшествовать процесс стирания (при ном все стираемые биты устанавливаются в состояние 1), причем стирание ин формации возможно только секторами по 512 байт. Для стирания нужно довод пигелыю установить бит разрешения стирания программной памяти PSEE (Program Store Erase Enable) и выполнить команду MOVX с любым адресом впут ри стираемого сектора и upon мольными данными. Эго о тачает, что для измене-
Глава 1. Архитектура микроконтроллеров смешанного сигнала С8051Гххх ния отдельного байта надо переслать содержимое сектора в память данных и про- извести там коррекцию байта. Затем выполнить стирание сектора в памяти про- грамм с последующей записью скорректированного содержимого сектора обратно. Повторная команда записи для каждой ячейки способна лишь обнулять биты, находящиеся в состоянии I. Структура адресного пространства памяти программ показана на Рис. 1.4. Об- щий объем адресного пространства — 64 Кбайта (адреса от 0000Н до FFFFH), од- нако старший сектор, размером 512 байт (адреса от FE00H до FFFFH), зарезерви- рован изготовителем, и в нем нельзя размещать программы и данные пользовате- ля. Зато имеется дополнительно 128-байтный сектор (адреса от 0000Н до 007FH) рабочей памяти (Scratchpad Memory), в котором можно размещать данные, опре- деляемые в процессе работы приложения, но предназначенные в дальнейшем только для считывания (например, калибровочные коэффициенты). Доступ к этому сектору возможен только при условии, что установлен бит разрешения до- ступа к рабочей памяти SFLE (Scratchpad FLASH Memory Access Enable). FFFF FEOO FDFF FDFE FDFD Стирание/запись только секторами ' по 512 байт SFLE = 0 Зарезервировано изготовителем Байт запрета чтения Байт запрета стирания/записи Граница программного чтения Бит Адреса блока 7 EOOOH...FDFDH 6 COOOH...DFFFH 5 AOOOH...BFFFH 4 8000H...9FFFH 3 6000H...7FFFH 2 4000H...5FFFH 1 2000H...3FFFH 0 0000H...1FFFH Запрет чтения и стирания/записи только блоками по 8 Кбайт SFLE = 1 0000 007F 0000 Рабочая память (только для данных) Рис. 1.4. Память программ. Фирма Silicon Laboratories обеспечивает память программ тремя опциями бе- зопасности: запрет стирания/записи, запрет чтения и граница программного чте- ния. Первая из этих опций предназначена для защиты содержимого памяти про- грамм от несанкционированного стирания/записи из-за сбоя программы, а две вторые опции предназначены для защиты программного кода от «пиратского» копирования при распространении изделий на базе МК. Опции запрета стирания/записи и запрета чтения управляются содержимым двух байтов программной памяти (см. Рис. 1.4): байта запрета стирания/записи (адрес FDFEH) и байта запрета чтения (адрес FDFFH). Каждый бит в этих байтах определяет запрет/разрсшсние соответствующей операции в пределах 8-Кбайт- ного блока, как это показано в таблице на Рис. 1.4. Состояние 1 соответствующе- го бига разрешает операцию, состояние 0 — запрещает Следовательно, после об-
1.2. Организация системы памяти щего стирания памяти все операции во всех блоках разрешены. Обнуляя биты, можно «выключать» соответствующие операции применительно к определенно- му блоку программной памяти. Попытка стирания (т. е. перевода в состояние «разрешено» — логическая I) указанных байтов через отладочный интерфейс приведет к полному стиранию всей программной памяти. Иначе говоря, снять за- прет можно только путем полного стирания содержимого программной памяти. Другой механизм защиты устанавливается с помощью границы программного чтения. Эта функция реализуется с помощью регистра границы доступа к флэш- памяти FLACL (FLASH Access Limit Register). В этот регистр один раз после каж- дого сброса, в соответствии с программой инициализации, записывается 8-биг- ное значение NNH, попытки повторной записи игнорируются системой. 16-бит- ный адрес границы программного чтения вычисляется процессором как NN00H (т. е. граница может проходить только по началу любой 256-байтной страницы программной памяти). Все программные коды, которые расположены выше гра- ницы, могут вызывать подпрограммы, размещенные ниже границы, но не могут читать содержимое ячеек программной памяти ниже границы с помощью комап ды MOVC. Попытка исполнения этой команды приведет к считыванию нулевых значений. Это позволяет разработчику защитить ту часть программного кода, ко- торая находится ниже границы, оставив потребителю возможность менять и до- полнять программный код выше границы. Поскольку начальное значение содер жимого регистра FLACL после сброса равно ООН, это значит, что «по умолчанию» вся программная память открыта для команд чтения. Если программист планиру- ет закрыть часть памяти, он должен предусмотреть в последовательности команд инициализации команду загрузки в регистр FLACL граничного значения. Структура регистра управления чтением/записью программной памяти I’SCTL (Program Store Read/Write Control) приведена на Рис. 1.5. R/W R/W R/W R/W R/W R/W R/W R/W 1 ~ 1 - - - | SFLE [ PSEE | PSWE | Значение после сброса: Адрес SFR: 8FH 1 о 1 о 0 о о 1 о о I о | Бит 7 Бит 6 Бит 5 Бит 4 БитЗ Бит 2 Бит 1 БитО Рис. 1.5. Регистр управления чтением/записью программной памяти (PSCTL) 1>пты7...3 Не используются. I hi г 2 SFLE — бит разрешения доступа к рабочей памяти. 0: доступ к 64-килобайтному пространству памяти программ. 1: доступ к 128-байтному пространству рабочей памяти. I >н г 1 PSEE — бит разрешения стирания программной памяти. 0: стирание программной памяти запрещено. 1: стирание программной памяти разрешено. I > н г О PSWE — бит разрешения записи программной памяти. 0: запись программной памяти запрещена. 1: запись программной памят и разрешена.
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx 1.2.2. Внутренняя память данных Внутренняя память данных предназначена для хранения данных, доступных для быстрого считывания/записи с применением различных способов адресации и размещения регистров специальных функций (SFR). Структура адресного про- странства показана на Рис. 1.6. FF оо зо 2F (Прямая или косвенная адресация) 80 7F 20 1F Регистры специальных функций SFR (Только прямая адресация) Нижние 128 байт (Прямая или косвенная адресация) Верхние 128 байт (Только косвенная адресация) Банк регистров 3 Банк регистров 2 Банк регистров 1 Банк регистров 0 Регистры общего назначения R7 R6 R5 R4 R3 R? R1 R0 Рис, 1.6, Внутренняя память данных. 7F 7Е 7D 7С 7В 7А 79 78 77 76 75 74 73 72 71 70 6F 6Е 6D 6С 6В 6А 69 68 67 66 65 64 63 62 61 60 5F 5Е 5D 5С 5В 5А 59 58 57 56 55 54 53 52 51 50 4F 4Е 4D 4С 4В 4А 49 48 47 46 45 44 43 42 41 40 3F ЗЕ 3D ЗС ЗВ ЗА 39 38 37 36 35 34 33 32 31 30 2F 2Е 2D 2С 2В 2А 29 28 27 26 25 24 23 22 21 20 1F 1Е 1D 1С 1В 1А 19 18 17 16 15 14 13 12 11 10 0F 0Е 0D ОС ов 0А 09 08 07 06 05 04 03 02 01 00 Адресное пространство внутренней памяти данных, объемом 256 адресов (от ООН до FFH), разделено на две области: нижние 128 байт (от ООН до 7FH) и верх- ние 128 байт (от 80Н до FFH). Для обращения к ячейкам памяти нижней области можно использовать команды как с прямой, так и с косвенной адресацией. Верх- няя область адресного пространства разделена на два сектора, каждый объемом 128 байт: сектор для размещения данных, доступный только с помощью косвен- ной адресации, и сектор регистров специальных функций, доступный только для команд с прямой адресацией. Кроме того, в нижней области внутренней памяти программ имеются два осо- бых сегмента. Прежде всего это сегмент регистров общего назначения (от ООН до 1FH), который разделен на 4 банка, в каждом из которых содержится по 8 регист- ров (R0...R7). Это означает, что эти ячейки внутренней памяти данных доступны также для команд с регистровой адресацией. Следует отметить, что в каждый кон- кретный момент выполнения программы доступны только регистры активного банка, а номер активного банка хранится в регистре PSW (см. Рис. 1.3) и может меняться в процессе выполнения программы. Второй сегмент (от 20Н до 2FH) содержит 16 бит-адресуемых байтов. Каждый бит этого сегмента имеет индивиду-
1.2. Организация системы памяти альный прямой адрес (см. Рис. 1.6.) и доступен для команд обработки битов. Этот адрес строится по следующей схеме: адазЭга^оЬгЬ^о, где а4аза2а|ао — младшие пять битов адреса бит-адресуемого байта; bjbibg — номер бита (справа налево, начиная с 0). Следует отметить, что эти 128 адресов вместе с адресами битов регистров спе- циальных функций (см. п. 1.1.2 на стр. 15) образуют общее битовое адресное про- странство в 256 адресов. Логическая сегментация внутренней памяти данных при программировании МК выполняется средствами проектирования программ в соответствии с дирек- тивами программиста. 1.2.3. Внешняя память данных Адресное пространство внешней памяти данных имеет объем 64 Кбайта с адресами от 0000Н до FFFFH, причем на самом кристалле размещена ее часть объ- емом 4 Кбайта с адресами от 0000Н до 0FFFH (Рис. 1.7). Доступ к внешней памяти возможен только с помощью команд с косвенной адресацией MOVX. Есть две модификации этих команд (см. Табл. 1.2): • первая использует в качестве указателя 16-битный регистр DPTR (MOVX A,@DPTR, MOVX @DPTR,A) и обеспечивает доступ в пределах всего адресного пространства, • вторая использует в качестве указателя 8-битный регистр R0 или R1 (MOVXA,@Ri, MOVX@Ri, А) и обеспечивает доступ в пределах одной 256-байтной страницы. FFFF Адресное пространство наружной памяти данных, подключаемой через интерфейс внешней памяти 4096 байт на кристалле 1000 OFFF 0000 Рис. 1.7. Внешняя память данных. В последнем случае старшие 8 битов полного физического 16-битного адреса (г. е. номер страницы) берутся из регистра управления интерфейсом внешней па мяти EMI0CN (External Memory Interface Control). При отсутствии внешних микросхем памяти, подключенных с помощью ин- терфейса внешней памяти, старшие 4 бита DPTR или EMI0CN игнорируются. 1.2.4. Интерфейс внешней памяти Интерфейс внешней памяти МК позволяет подключать к МК микросхемы статической памяти SRAM (Static Random Access Memory) объемом до 64 Кбайт. Гикая дополнительная память имеет шину данных D[7:0|, шину адреса А|15:0|, вход разрешения выхода ОЕ (Output Enable), вход разрешения записи WE (Write I liable), вход разрешения кристалла СЕ (Chip Enable) и может подключаться к МК в мультиплексном или раздельном режиме как показано lia Рис. 1.8. В завн
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx симости от состояния бита выбора портов PRTSEL (Port Select) пользователь мо- жет разместить интерфейс внешней памяти на младшей (P0...P3) или старшей (Р4...Р7) группе портов ввода/вывода. PRTSEL=О -( г- PRTSEL =1 Мультплексный режим: EMD2 = О Раздельный режим: EMD2 = 1 Рис. 1.8. Интерфейс внешней памяти. В мультиплексном режиме задействованы только три порта из выбранной группы: порт РЗ/Р7 используется как мультиплексированная шина младшего байта адреса/данных, через порт Р2/Р6 выдается старший байт адреса, а на порте Р0/Р4 формируются управляющие сигналы. Сигнал записи WR (Write) использу- ет бит 7, сигнал чтения RD (Read) - бит 6 (подчеркнутый сими. । oniaaac'i низкий
1.2. Организация системы памяти активный уровень сигнала), а сигнал разрешения записи в адресный регистр ALI (Address Latch Enable) — бит 5. Последний формируется МК только в мультиплек- сном режиме работы интерфейса внешней памяти и активизирует вход строба G (Gate) регистра-защелки (например, типа 74НС373) в момент передачи адреса по мультиплексированной шине. EMD1,0 = 00 EMD1,0 = 01 EMD1,0 = 10 EMD1, 0 = 11 FFFF 4096 байт на кристалле Наружная память данных, подключаемая через интерфейс внешней памяти Наружная память данных, подключаемая через интерфейс внешней памяти Наружная память данных, подключаемая через интерфейс внешней памяти 1000 OFFF 4096 байт на кристалле (без выбора банка) (с выбором банка) 0000 4096 байт на кристалле 4096 байт на кристалле 4096 байт на кристалле Рис. 1.9. Рабочие режимы интерфейса внешней памяти. В раздельном режиме (см. Рис. 1.8) задействованы все четыре порта выбран ной группы: порт РЗ/Р7 используется как шина данных, через порт Р2/Р6 выдает- ся младший байт адреса, через порт Р1/Р5 выдается старший байт адреса, а через порт Р0/Р4 выдаются управляющие сигналы. Сигнал записи WR формируется би гом 7, сигнал чтения RD — битом 6. Выбор того или иного режима определяется состоянием управляющего бига 1 MD2 (External Memory Interface Mode). Преимуществом мультиплексного ре- жима является сокращение количества используемых внешних выводов, однако при этом увеличивается время обращения к памяти по сравнению с раздельным режимом. Возможность выбора режима позволяет разработчику выбрать опти м<1льную конфигурацию, а также использовать микросхемы SRAM с мультиплск сированной шиной адреса данных, в которых регистр-защелка адреса размещена непосредственно на кристалле микросхемы памяти. Два других управляющих бита выбора режима, EMD1 и EMD0, определяют h'iihi из четырех рабочих режимов интерфейса внешней памяти (Рис. 1.9): • EMD1,0 = 00: резидентный режим. Доступ осуществляется только к сегмсн гу внешней памяти, расположенному на кристалле. Старшие четыре бита адре са игнорируются, поэтому получается 16-кратное виртуальное отображение 4-Кбайтного сегмента по всему адресному пространству. • EMD1, 0 = 01: совмещенный режим без выбора банка памяти. Если адрес на мяти ниже 4-Кбайтной границы, то идет обращение к сегменту внешней па мяти на кристалле, если выше — то к наружному сегменту. Если при лом ис- пользуется команда MOVX с 8-битным адресом, то старшие 8 бит адреса
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx берутся из регистра порта Р2/Р6, причем регистр ЕМ 10CL должен содержать номер страницы, не содержащейся во внутреннем сегменте. • EMD1, 0 = 10: совмещенный режим с выбором банка памяти. Если адрес па- мяти ниже 4-Кбайтной границы, то обращение производится к сегменту вне- шней памяти на кристалле, если выше — то к наружному сегменту. Если при этом используется команда MOVX с 8-битным адресом, то старшие 8 бит ад- реса берутся из регистра EMI0CL. • EMD1, 0=11: внешний режим. Доступ осуществляется только к наружному сегменту памяти размером 64 Кбайта, сегмент внешней памяти на кристалле «невидим» для процессора. Все вышеупомянутые управляющие биты — PRTSEL, EMD2, EMD1 и EMD0 — размещены в регистре конфигурации внешней памяти EMIOCF (External Memory Configuration), как показано на Рис. 1.10. Кроме этого там имеются еще два бита выбора длительности импульса ALE: EALE1 и EALE0. В зависимости от состояния этих битов можно выбрать длительность импульса, равную 1,2, 3 или 4 периодам системной синхронизации SYSCLK, что позволяет согласовать тактовую частоту МК с временными параметрами микросхем памяти. R/W R/W R/W R/W R/W R/W R/W R 1 - - | PRTSEL | EMD2 | EMD1 I ЕМ DO I EALEI 1 EALE0 1 Значение после сброса: Адрес SFR: АЗН 1 о 1 1 о 1 о 1 0 0 1 о 1 1 1 1 1 Бит 7 Бит 6 Бит 5 Бит 4 БитЗ Бит 2 Бит 1 Бит 0 Рис. 1.10. Регистр конфигурации внешней памяти (EMIOCF). Биты 7, 6 Не используются. Бит 5 PRTSEL — выбор портов для интерфейса внешней памяти. 0: выбраны порты P0...P3. 1: выбраны порты Р4...Р7. Бит 4 EMD2 — выбор режима работы шин адреса/данных. 0: мультиплексный режим. 1: раздельный режим. Биты 3, 2 EMD1, 0 — выбор рабочего режима интерфейса внешней памяти. 00: резидентный режим. 01: совмещенный режим без выбора банка памяти. 10: совмещенный режим с выбором банка памяти. 11: внешний режим. Биты 1,0 EALE1, 0 — биты выбора ширины импульса ALE (действуют только в мультиплексном режиме (EMD2 = 0). 00: длительность ALE = 1 период SYSCLK. 01: длительность ALE = 2 периода SYSCLK. 10: длительность ALE = 3 периода SYSCLK. 11: длительность ALE = 4 периода SYSCLK.
1.3. Организация ввода/вывода При проектировании схемы подключения внешней памяти данных не следует забывать, что двунаправленная шина (шина данных в раздельном режиме или шина адреса/данных в мультиплексном режиме), с учетом схемотехники буферов порта, нуждается в подключении внешних резисторов между выводами МК и ли- нией питающего напряжения (Pull-Up Resistors). 1.3. Организация ввода/вывода Микроконтроллер C8051F020 имеет 64 вывода для выполнения функций вво- да/вывода данных, организованных в восемь 8-битных портов. Младшая группа портов ввода/вывода (P0...P3) имеет как побайтовую, так и побитовую адресацию через соответствующие регистры специальных функций, а старшая группа (Р4...Р7) - только побайтовую. Все порты допускают величину входного сигнала до 5 В и могут быть сконфигурированы как по двухтактной (Push-Pull - пушпуль- ной) схеме, так и по схеме с открытым стоком (Open Drain), а также имеют на вы- ходе «слабые» (порядка 100 кОм) «оттягивающие» резисторы (Weak Pull-Ups). 1.3.1. Схема выходного буфера порта ввода/вывода Схема разрядной ячейки порта ввода/вывода приведена на Рис. 1.11. Соб- ственно выходной буфер реализован на комплиментарной паре МОП-транзис- торов, стоки которых подключены непосредственно к внешнему выводу порта, а истоки — к земле (DGND) и линии напряжения питания (VDD). Дополни- тельный транзистор, включенный между выводом порта и линией напряжения питания, играет роль «слабого» «оттягивающего» сопротивления (WEAK), уп- равляемого сигналом WEAK-PULLUP. Сигнал PORT-OUTPUT, подлежащий выводу, поступает на выходной буфер через логическую схему, управляемую сигналом разрешения PORT-OUTENABLE и сигналом конфигурации PUSH PULL (1 — режим Push-Pull. 0 — режим Open Drain). Для использования разря- да порта в режиме ввода он должен быть сконфигурирован по схеме с откры- тым стоком (верхний транзистор закрыт), а разряд регистра порта нужно уста- новить в состояние логической 1 (нижний транзистор закрыт). При этом сиг- нал с внешнего вывода порта через триггер Шмитта, гистерезис которого используется для фильтрации сигналов с пологим фронтом, поступает на вход разряда регистра порта PORT-INPUT. Выводы порта Р1, кроме стандартного режима, могут использоваться как ана- логовые входы аналого-цифрового преобразователя ADC1. Поэтому схема раз рядной ячейки этого порта содержит дополнительно аналоговый ключ (см Рис. 1.11), позволяющий подключить вывод порта к аналоговому входу мульти плексора АЦП ANALOG INPUT. Состояние аналогового ключа управляется сш налом конфигурации ANALOG SELECT, который одновременно блокирует триг гер Шмитта и выключает «оттягивающий» МОП-транзистор, обеспечивая выси кий импеданс, необходимый для аналогового входа.
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx Внешний вывод порта Рис. 1.11. Схем;! разрядной ячейки порта ввода/вывода. 1.3.2. Структура ввода/вывода Старшая группа портов Р4...Р7 может быть использована как порты ввода/вы- вода или как интерфейс внешней памяти (см. п. 1.2.4 на стр. 27). Конфигурация выходных буферов этих портов возможна только группами по 4 бита (ниблами) с помощью битов регистра выходного режима портов Р4...Р7: P74OUT (Ports 7...4 Output Mode Register). Выводы младшей группы портов P0...P3, кроме того, могут использоваться как входы/выходы цифровых периферийных устройств, а выводы порта Pl — еще и как входы аналогового мультиплексора аналого-цифрового преобразователя ADCL Поэтому структура ввода/вывода портов младшей группы (Рис. 1.12) со- держит матричный коммутатор (Crossbar), управляемый приоритетным дешифра- тором, состояние входов которого определяется информацией в управляющих ре- гистрах: XBRO, XBR1, XBR2 (Port I/O Crossbar Register) и P1MDIN (Port 1 Input Mode Register). Выходы матричного коммутатора через разрядные ячейки вво- да/вывода подключены непосредственно к внешним выводам портов P0...P3 МК. Состояние разрядов управляющих регистров POMDOUT, P1MDOUT, P2MDOUT, P3MDOUT (Port Output Mode Register) задают конфигурацию выходных буферов побитно (см. п. 1.3.1 на стр. 31). На входе матричного коммутатора имеются две группы выводов: от выходов регистров портов и от выводов цифровых периферийных узлов Измспяя инфор-
Управляющие регистры Рис. 1.12. Функциональная схема младшей группы портов ввода/вывода I Высший । приоритет Низший приоритет 1.3. Организация вводо/выводо
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx мацию в регистрах XBRO, XBRl, XBR2, можно через матричный коммутатор под- ключить на внешние выводы портов МК Р0.0...Р3.7 в порядке убывающего при- оритета: выводы контроллеров последовательного интерфейса UARTO, SPI, SMBus, UARTl, программируемого массива счетчиков РСА, выходы аналоговых компараторов, выводы таймеров и внешних прерываний ТО, Tl, Т2, Т2ЕХ, Т4, Т4ЕХ, INTO, INTI, а также выход системной тактовой частоты SYSCLK и вход за- пуска аналого-цифрового преобразователя CNVSTR. Следует отметить, что циф- ровые входы регистров портов P0...P3 подключены непосредственно к соответс- твующим внешним выводам МК (см. Рис. 1.12), поэтому при чтении регистра порта считывается состояние внешних выводов. Исключением является выпол- нение операций команд чтения-модификации-записи (read-modify-write instructions), а именно: ANL, ORL, XRL, CPL, INC, DEC, DJNZ, JBC, CLR, SET и битовой команды MOV. При выполнении этих команд аргумент считывается из регистра порта, а не с внешнего вывода. Логика работы матричного коммутатора иллюстрируется приоритетной таб- лицей Рис. 1.13. В первой колонке этой таблицы перечислены группы выводов, относящиеся к соответствующим периферийным устройствам. Каждая точка в таблице указывает на возможность коммутации соответствующего вывода пери- ферийного устройства на определенный внешний вывод МК. Из Рис. 1.13 видно, что выбор программистом определенного устройства влечет за собой назначение внешних выводов для всей группы выводов этого устройства. Например, выбор UARTO влечет за собой назначение вывода РО.О для ТХО и Р0.1 — для RX0 и т. д. Распределение внешних выводов, согласно Рис. 1.13, производится в приоритетном порядке сверху вниз. Если активирован интерфейс внешней памяти (см. п. 1.2.4 на стр. 27), то пропускается назначение выводов, отведенных для трех сигналов управления ALE, RD, WR (Р0.5, Р0.6, Р0.7) в мультиплексном режиме или двух сигналов RD, WR (Р0.6, Р0.7) — в раздельном режиме. Аналогично производится пропуск назначения выводов порта Р1, если они выбраны как аналоговые входы аналого-цифрового преобразователя ADC1 с помощью управляющих битов регистра P1MDIN. Следует отметить, что если активирован интерфейс внешней памяти, то при выполнении команд MOVX соответствующие линии портов задействуются этим интерфейсом независимо от назначений матричного коммутатора. Пример назначения выводов портов младшей группы приведен на Рис. 1.14. Из периферийных устройств выбраны: UARTO, SMBus, UARTl, INTO, INTI, три вывода порта Р1(Р1.2, Pl.3, Р1.4) определены как аналоговые, интерфейс вне- шней памяти задействован в мультиплексном режиме. С учетом пропусков назна- чения матричного коммутатора будут выполнены следующим образом: выводы UARTO назначаются на РО.О для ТХО и Р0.1 — для RX0, выводы SMBus назнача- ются на Р0.2 для SDA и РО.З — для SCL, выводы UARTl назначаются на Р0.4 для ТХ1 и Р1.0 — для RX1, INTO назначается на Р1.1 и INT1 назначается на Р1.5 (яр- кие черные точки на Рис. 1.14). Два последних вывода младшей группы Р3.6 и Р3.7, независимо от настроек матричного коммутатора, имеют фиксированную функцию входов внешних за- просов прерывания по программируемому фронту — позитивному (rising edge) или
1.3. Организация ввода/вывода Порт РО Р1 Р2 РЗ Бит 0 12 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ТХО RXO SCK MISO MOSI NSS • • • • • • • • • • SDA SCL • • • • • • • • ТХ1 RX1 • • • • • • • • • • • СЕХО СЕХ1 СЕХ 2 СЕХЗ СЕХ4 • • • • • • • • • • ••••• • • • ••••• • • ••••••• • • ••••••• ECI • ••••••••••••••• СРО • ••••••••••••••ее СР1 • •••••••••••••••в» то • ••••••••••••••••ее INTO • •••••••••••••••••ее Т1 • •••••••••••••••••••а INT1 • ••••••••••••••••••••в T2 • ••••••••••••••••••••ее Т2ЕХ • •••••••••••••••••••••ее Т4 • ••••••••••••••••••••••ее Т4ЕХ • ••••••••••••••••••••••••в SYSCLK • ••••••••••••••••••••••••ее CNVSTR •••••••••••••••••••••••••••в Входы ADC1/ADDR [15:8] Раздельный режим интерфейса внешней памяти ADDR [7:0] Раздельный режим ADDR[15:8] Мультиплексный режим DATA [7:0] Раздельный режим AD [7:0] Мультиплексный режим Рис. 1.13. Приоритетная таблица матричного коммутатора. не гати вному( falling edge). Биты выбора фронта для каждого из этих прерывании находятся в регистре флагов прерываний порта 3 (P3IF — Port3 Interrupt Flag Register). Совершенно очевидно, что для конфигурации портов МК нужно определить информацию во множестве управляющих регистров. Для этой цели удобнее всего воспользоваться специальным программным средством проектирования — Мас- к ром Конфигурации (Configuration Wizard), предоставляемым фирмой-произво НИ гелем. Работа с такой программой позволяет пользователю задавать конфигу- рацию путем выбора опций с помощью удобного графического интерфейса (ем. и. 2.4 на стр. 121.).
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx Рис. 1.14. Пример конфигурации матричного коммутатора. 1.4. Система синхронизации Функциональная схема подсистемы синхронизации МК приведена на Рис. 1.15. Подсистема синхронизации включает в себя внутренний (верхняя часть рисунка) и внешний (нижняя часть рисунка) генераторы синхронизации. Каж- дый генератор управляется соответствующим регистром. Внутренний генератор является неточным и нестабильным: отклонения по частоте могут быть до 25%, однако никаких дополнительных элементов для его работы не требуется. Вне-
1.4. Система синхронизации шний генератор, как это следует из его названия, требует подключения внешних времязадаюгцих элементов, поэтому его точность и стабильность определяются главным образом параметрами этих элементов. Из рисунка видно, что здесь воз можно 4 опции: кварцевый или керамический резонатор, RC-цепь, С-цепь и сии хронизация от внешнего генератора. Подключение внешних цепей производится к выводам МК XTALl, XTAL2, что понятно из рисунка. Выбор источника систем- ного тактового сигнала SYSCLK осуществляется мультиплексором, управляемым битом выбора синхронизации CLKSL (System Clock Source Select Bit), находя- щимся в регистре управления внутреннего генератора. Поскольку системный сброс вызывает очистку этого бита, сразу после сброса МК всегда синхронизиру- ется внутренним генератором. Затем уже по программе, если это необходимо, можно перейти на синхронизацию от внешнего генератора. Опция 2 ~AV+ Опция 4 Опция 3 KTAL1 XTAL2 Опция 1 XTAL1 Рис. 1.15. Функциональная схема подсистемы синхронизации МК. 1.4.1. Внутренний генератор синхронизации Работа внутреннего генератора контролируется регистром управления Bttyi- рснпего генератора синхронизации OSCICN (Internal Oscillator Control Register), ripyKiypa которого приведена па Рис. 1.16. Кроме описанного выше бита выбор i синхронизации CLKSL, регистр OSCICN содержит биты управления частотой внутреннего генератора IFCNI, IICNO (Internal Oscillator Frequency Control Bits),
\ово 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx юзволяющие устанавливать частоту 2, 4, 8 и 16 МГц, бит разрешения внутренне- о генератора IOSCEN (Internal Oscillator Enable Bit) и флаг готовности внутрен- iero генератора IFRDY (Internal Oscillator Frequency Ready Flag). Кроме того, в uiiiiioM регистре находится бит разрешения детектора нарушения синхронизации HSCLKE (Missing Clock Enable Bit). Указанный детектор предназначен для конт- роля тактовых импульсов системной синхронизации SYSCLK и является состав- toil частью подсистемы сброса МК. R/W R/W R/W R/W R/W R/W R/W R/W |msclke| - | 1FRDY | CLKSL | IOSCEN| IFCN1 | IFCN0 | Значение после сброса: Адрес SFR: В2Н 1 о | о 1 о 1 1 0 1 1 0 I 0 | Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 Бит 0 Рис. 1.16. Регистр управления внутреннего генератора синхронизации (OSC1CN). Бит 7 MSCLKE — бит разрешения детектора пропуска синхронизации. 0: детектор пропуска синхронизации запрещен. 1: детектор пропуска синхронизации разрешен — инициируется сброс, если импульс синхронизации отсутствует в течение более чем 100 мкс. Биты 6, 5 Не используются. Бит 4 IFRDY — флаг готовности внутреннего генератора синхронизации. 0: частота внутреннего генератора не соответствует частоте, заданной битами управления частотой 1FCN. 1: частота внутреннего генератора соответствует частоте, заданной би- тами управления частотой IFCN. Би г 3 CLKSL — биты выбора источника синхронизации. 0: использован внутренний генератор. 1: использован внешний генератор. Би г 2 IOSCEN — бит разрешения внутреннего генератора. 0: внутренний генератор запрещен. 1: внутренний генератор разрешен. Би гы 1, 0 IFCN 1,0 — биты управления частотой внутреннего генератора. 00: типовая частота внутреннего генератора 2 МГц. 01: типовая частота внутреннего генератора 4 МГц. 10: типовая частота внутреннего генератора 8 МГц. 11: типовая частота внутреннего генератора 16 МГц Согласно состоянию регистра OSC1CN после сброса (см. Рис. 1.16) по окон- чании действия сигнала сброса выбран внутренний генератор синхронизации (Cl KSL = 0), его работа разрешена (IOSCEN = 1), а флаг готовности подтвержда- ет, что его частота находится на заданном уровне (1FRDY= 1).
1.4. Система синхронизации 1.4.2. Внешний генератор синхронизации Работа внешнего генератора контролируется регистром управления внешнего генератора синхронизации OSCXCN (External Oscillator Control Register), струк- тура которого приведена на Рис. 1.17. Регистр OSCXCN содержит биты управле- ния частотой внешнего генератора XFCN2, XFCN1, XFCNO (External Oscillator Frequency Control Bits), биты режима внешнего генератора XOSCMD2, XOSCMD1, XOSCMDO (External Oscillator Mode Bits) и флаг состояния режима кристаллического резонатора XTLVLD (Crystal Oscillator Valid Flag), единичное состояние которого подтверждает работу генератора на резонансной частоте. R/W R/W R/W R/W R/W R/W R/W R/W |XTLVLD|XOSCMD2|XOSCMD1|XOSCMDO| - | XFCN2 | XFCN1 | XFCN0~| Значение после сброса: AflpecSFR:B1H |о|о|о|о|о|о|о|о| Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 Бит О Рис. 1.17. Регистр управления внешнего генератора синхронизации (OSCXCN). Бит 7 XTLVLD — флаг состояния режима кристаллического резонатора (Crystal) (действителен только, когда XOSCMD = Их). 0: режим кристаллического резонатора не использован или частота генератора в этом режиме нестабильна. 1: генератор работает в режиме кристаллического резонатора и его частота стабильна. Биты 6, 5,4 XOSCMD2, 1, 0 — биты режима внешнего генератора синхронизации. ООх: выключен (вывод XTAL1 МК заземлен внутри микросхемы). 010: синхронизация от наружного КМОП-генератора через вывод XTAL1. 011: синхронизация от наружного КМОП-генератора через вывод XTAL1 с делением частоты на 2. 1 Ох: режим с времязадающей RC- или С-цепью с делением частоты на 2. 110: режим кристаллического резонатора. 111: режим кристаллического резонатора с делением частоты на 2. Бит 3 Зарезервирован. Биты 2, 1,0 XFCN2,1, 0 — биты управления частотой внешнего генератора. Значения битов управления частотой внешнего генератора XFCN2, 1,0: Значение XFCN2, 1,0 Режим Crystal (XOSCMD = Их) Режим RC (XOSCMD = 10х) Режим С (XOSCMD = 10х) 0(Ю f< 12 кГц Г< 25 кГц KF = 0.044 001 12 кГц <1X30 кГц 25 кГц < f < 50 кГц KF = 1.4 010 30 кГц < f < 95 кГц 50 кГц < f С 100 кГц KF = 4.4 011 95 кГц < 270 кГц 100 кГц <f< 200 кГц KF = 13 100 270 кГц < f ! 720 кГц 200 кГц < f < 400 кГц KF = 38 101 720 кГц <Г< 2.2 МГц 400 кГц < f < 800 кГц KF = 100 по 2.2 МГц < Г 6.7 МГц 800 кГц < Г* 1.6 МГц KF = 420 L ш 1 6 7 МГц 1.6 Mlh < Г< 3.2 Mlh KF 1400
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx Биты выбора режима XOSCMD2, XOSCMDl, XOSCMDO позволяют разра- ботчику выбрать один из режимов: выключено, синхронизация от внешнего гене- ратора, режим с внешней пассивной цепью (RC или С), режим с внешним крис- таллическим резонатором. Для всех активных режимов можно выбрать опцию де- ления частоты на 2. Выбор битов управления частотой внешнего генератора XFCN2, XFCNI, XFCN0 производится в соответствии с требуемой частотой и в зависимости от режима: • Режим кристаллического резонатора Crystal (см. Рис. 1.15, опция 1): выбира- ется код XFCN2, 1,0 в соответствии с частотой резонатора; • Режим с времязадающей цепью RC (см. Рис. 1.15, опция 2): выбирается код XFCN2, 1, 0 в соответствии с частотой f, рассчитываемой по формуле f= 1.23 103/(RC), где f — в [МГц], С — в [пФ], R — в [кОм]; • Режим с времязадающей цепью С (см. Рис. 1.15, опция 3): выбирается код XFCN2, 1, 0 в соответствии с коэффициентом частоты KF, рассчитываемым по формуле f = KF/(CAV+), где f— в [МГц], С — в [пФ], AV+ — аналоговое напряжение питания в [В]. Следует отметить, что все указанные управляющие биты могут быть назначе- ны автоматически при использовании Мастера Конфигурации (Configuration Wizard). 1.5. Система сброса Подсистема сброса позволяет перевести МК в заранее предопределенное со- стояние. В этом состоянии выполняются следующие операции: • Процессорное ядро прекращает выполнение команд программы. • Регистры специальных функций сбрасываются в определенное исходное со- стояние. • Внешние выводы портов устанавливаются в определенное нейтральное со- стояние. Прерывания запрещены, таймеры остановлены. Состояние памяти остается без изменений, однако из-за сброса в предопреде- ленное состояние указателя стека SP содержимое стека теряется. Выходные буферы портов конфигурируются по схеме с открытым стоком, ре- гистры портов сбрасываются в состояние FFH (все логические I) и включаются «от- тягивающие» МОП-транзистоэы, что переводит внешние выводы портов в состоя- ние логической I. Следует отмстить, что «оттягивающие» МОП-транзисторы вклю- чаются только в момент выхода МК из состояния сброса, что позволяет экономить (нсргопогребление непосредственно во время нахождения МК в состоянии сброса.
1.5. Система сброса При выходе из состояния сброса программный счетчик PC сброшен, синхро- низация процессора осуществляется от внутреннего генератора, работающего на частоте 2 МГц. Выполнение программы начинается с команды, размещенной по адресу 0000Н. 1.5.1. Организация системы сброса Функциональная схема системы сброса приведена на Рис. 1.18. VDD Рис. 1.18. Система сброса микроконтроллера Согласно этой схеме сброс может вызываться семью источниками: • монитор питания (включение или провалы питания); • внешний вывод сброса RST; • внешний вывод CNVSTR сигнала начала преобразования АЦП (назначается через матричный коммутатор); • программная команда сброса; • выход компаратора 0; • детектор нарушения синхронизации MCD (Missing Clock Detector); • сторожевой таймер WDT (Watch-Dog Timer). Каждому источнику сброса cooibctciвуег бит в регистре источников сброса RSI SRC (Reset Source Register), структура которого покатана па Рис. 1.19.
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx R R/W R/VV R/W R R R/W R I CNVRSEF I CORSEF | SWRSEF |WDTRSF|MCDRSF| PORSF |PINRSF| Значение после сброса: Адрес SFR: EFH 1 х 1 х х | X 1 2L_ 1 x 1 X 1 X 1 Бит 7 Бит 6 Бит 5 Бит 4 БитЗ Бит 2 Бит 1 БитО Примечание. Запрещаете51 использовать операции типа «чтение-модиФикация-запись» для этого регистра Рис. 1.19. Регистр источников сброса (RSTSRC). Бит 7 Зарезервирован. Бит 6 CNVRSEF - бит разрешения и флаг сигнала начала преобразования CNVSTR. Запись: О запрещен сброс oi CNVSTR 1: разрешен сброс от CNVSTR (лог. 0). Чтение: 0: источником предшествующего сброса был не CNVSTR. I: источником предшествующего сброса был CNVSTR. Бит 5 C0RSEF - бит разрешения и флаг компаратора 0. Запись: 0: запрещен сброс откомпаРат°Ра 0. 1: разрешен сброс от компаратора 0 (лог. 0). Чтение: 0 : источником предшествующего сброса был не компаратор 0. 1: источником предшествующего сброса был компаратор 0. Бит 4 SWRSEF - бит управления и флаг программного сброса. Запись: 0: нет эффекта. ____ 1: вызывает внутренний сброс, на состояние RST не влияет. Чтение: 0: источником предшествующего сброса был не программный сброс. 1: источником предшествующего сброса был программный сброс Бит 3 WDTRSF - флаг сброса от сторожевого таймера WDT. 0: источником предшествующего сброса был не WDT. 1: источником предшествующего сброса был WDT. Бит 2 MCDRSF - флаг сброса детектора нарушения синхронизации MCD. 0: источником предшествующего сброса был не MCD. 1: источником предшествующего сброса был MCD. Бит 1 PORSF - бит управления и флаг сброса при включении питания POR. Запись: 0: нет эффекта. ________ 1: вызывает сброс PCR, RST имеет низкий уровень. Чтение: 0: источником предшествующего сброса был не POR. 1: источником предиествующего сброса был POR.
1.5. Система сброса Бит О PINRSF — флаг сброса от внешнего вывода RST. 0: источником предшествующего сброса был не вывод RST I: источником предшествующего сброса был вывод RST. Монитор питания представляет собой аналоговый компаратор, сравниваю щий уровень напряжения питания VDD с уровнем напряжения сброса VRST = = 2.55...2.7 В и запускающий формирователь импульса сброса. Последний про должает удерживать вывод сброса МК RST в состоянии активного логического нуля в течение 100 мс после того, как напряжение питания превысит уровень Vrst, что достаточно для полной стабилизации питающего напряжения. Работа монитора питания разрешается высоким уровнем на внешнем выводе МК MONEN (Monitor Enable), который рекомендуется подключить к выводу питания VDD (на схеме не показан). Монитор питания позволяет реализовать две функ ции сброса: сброс при включении питания и сброс при отказе питания. Функция сброса при включении питания POR (Power-On-Reset) обеспечивает системный сброс при включении питания и устанавливает флаг PORSF в регист ре RSTSRC, при этом остальные флаги не определены. Все же другие источники сброса очищают этот флаг. Следовательно, если после старта программы фла> PORSF = 1, это означает, что было произведено включение питания, т. е. состоя ние ячеек памяти МК не определено. Функция сброса при отказе питания PFR (Power-Fail-Reset) переводит МК в состояние сброса, как только напряжение питания VDD падает ниже уровня VHS1 и удерживает его в состоянии сброса в течение еще 100 мс после того, как оно восстановится до уровня VRST. При этом также устанавливается флаг PORSF. Пос- кольку монитор питания не контролирует величину падения напряжения пита- ния, которая может и не достигать уровня, критического для работы памяти, дан ные при таком отказе могут не измениться. Однако, если флаг PORSF после сброса установлен, нет гарантии того, что данные действительно не повреждены. Вывод RST предназначен для подключения схемы внешнего сброса. Для ини циирования сброса схема должна сформировать низкий логический уровень сш пала. Для ослабления помех рекомендуется в состав схемы включить «оттягиваю щий» к питающему напряжению резистор и фильтрующий конденсатор. Наличие резистора позволяет подключать к выводу RST несколько внешних источников, образуя так называемое «монтажное ИЛИ». МК остается в состоянии сброса как минимум втечение 12 периодов тактовой частоты после снятия активного низко го потенциала с вывода RST. При этом устанавливается флаг PINRSF (Hardware Pin Reset Flag) в регистре RSTSRC. Вывод CNVSTR сигнала начала преобразования АЦП может быть использо вин как источник сброса с низким активным уровнем. Разрешение на использо- вание этого сигнала обеспечивается путем записи логической единицы в биг CNVRSEF (Convert Start Reset Source Enable and Flag) регистра RSTSRC (см. Рис. 1.19). Это соответствует уровню логической единицы сигнала разрешс ним CNVSTR reset enable в схеме Рис. 1.18. Если после сброса бит CNVRSEF » 1, «нами г, источником сброса был сигнал CNVSTR. Программная команда сброса инициируется путем записи логической едини цы вбит SWRSEF(Sollwurc Reset Force and Flag)регистра RSTSRC (см. Рис. 1.19)
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx Состояние бита SWRSEF = I после сброса подтверждает, что сброс был иниции- рован программой. Сигнал на выходе аналогового компаратора 0 также может инициировать сброс, если установлен бит разрешения сброса от компаратора О C0RSEF (Comparator 0 Reset Enable and Flag) в регистре RSTSRC (см. Рис. 1.19). Это соот- ветствует уровню логической единицы сигнала разрешения СРО reset enable в схеме Рис. 1.18. Перед записью 1 в бит C0RSEF компаратор 0 должен быть полно- стью сконфигурирован (см. п. 1.10.4 на стр. 108). Состояние бита C0RSEF = 1 после сброса подтверждает, что напряжение на прямом входе компаратора CP0+ упало ниже уровня напряжения на инверсном входе CP0-. Таким образом, ком- паратор 0 может быть использован для мониторинга уровня аналогового сигнала в системе, например, дополнительного источника питания. Детектор нарушения синхронизации MCD (Missing Clock Detector) представ- ляет сбой одновибратор, срабатывающий при отсутствии импульсов синхрониза- ции в течение более чем 100 мкс. Сброс, вызванный этим источником, идентифи- цируется по состоянию логической 1 специального флага MCDRSF (Missing Clock Detector Flag) в регистре RSTSRC (см. Рис. 1.19). Разрешение этого источника сброса обеспечивается с помощью бита MSCLK.E (Missing Clock Enable Bit) регис- тра управления внутренним генератором синхронизации OSCICN (см. Рис. 1.16). Сторожевой таймер WDT (Watch-Dog Timer) представляет собой 21-битный программно управляемый счетчик, постоянно подключенный к системной синх- ронизации. Нормально работающая программа должна периодически, с интерва- лом, меньшим, чем время переполнения сторожевого таймера, перезагружать его в исходное состояние. В случае «зависания» процессора перезагрузки сторожево- го таймера не происходит, он переполняется и вызывает системный сброс с пос- ледующей реинициализацией процесса. Использование такого механизма позво- ляет страховать работу процессора в условиях сильных электромагнитных помех, в результате которых может произойти сбой программного счетчика с потерей уп- равления и зацикливанием программы. Сброс, вызванный сторожевым тайме- ром, идентифицируется по состоянию логической 1 специального флага WDTRSF (Watch-Dog Timer Reset Flag) в регистре RSTSRC (см. Рис. 1.19). 1.5.2. Управление сторожевым таймером Сразу после сброса процессора сторожевой таймер автоматически разрешен и запущен с максимально возможным интервалом. В процессе работы сторожевой таймер управляется с помощью регистра WDTCN (Watchdog Timer Control Register), структура которого приведена на Рис. 1.20. R/W R/W R/W R/W R/W R/W R/W R/W 1 1 1 1 Г Значение после сброса: Адрес SFR: FFH 1 * 1 1 X 1 х | X х 1 г 1 ! I I Бит 7 Бит 6 Бит 5 Бит 4 БитЗ Бит 2 Бит 1 БитО I'm I 10. I’emcip упринлепия ciopoxenii i laiiMcpoM (WDTCN).
1.6. Система прерываний Биты 7...О Управление сторожевым таймером WDT. Запись кода А5Н перезагружает и разрешает WDT. Запись кода DEH, сопровождаемого в течение четырех периодов син- хронизации кодом ADH, запрещает WDT Запись кода FFH блокирует запрет WDT. Бит 4 WDTCN.4 — бит состояния WDT (при чтении). 0: WDT неактивен. I: WDT активен. Биты 2...0 Биты установки интервала отсчета WDT. При записи этих бит необходимо сбросить старший бит WDTCN.7. Перезагрузка и разрешение сторожевого таймера выполняются путем записи в регистр WDTCN кода А5Н. Запрет сторожевого таймера производится путем записи в регистр WDTCN кода DEH, сопровождаемого в течение четырех периодов синхронизации кодом ADH. Для исключения задержки между двумя записями прерывания на время выполнения этих команд управления должны быть запрещены. Запись кода FFH в регистр WDTCN блокирует запрет сторожевого таймера Это означает, что разрешение работы WDT не может быть снято никакими ко- мандами до следующего системного сброса, т. е. после блокирования никакие случайные команды не могут отменить работу сторожевого таймера. Разработчи- ки МК рекомендуют всегда использовать функцию блокировки в системах, где задействован сторожевой таймер, во избежание случайной его отмены в результа- те сбоя управления. Установка интервала переполнения сторожевого таймера производится с по- мощью трехбитного кода WDTCN.[2...0] (см. Рис. 1.20). При записи этих бит старший бит регистра WDTCN должен быть сброшен. Время переполнения сто- рожевого таймера Т можно рассчитать по формуле т — j3+ WDTCN.[2...0] т 1-4 1 1 1 SYSCLK, где Tsysclk — период системной синхронизации. Например, для частоты системной синхронизации 2 МГц диапазон интервала Таймера будет от 0.032 до 524 мс. 1.6. Система прерываний Процессорное ядро МК снабжено расширенной системой векторных преры- ваний, поддерживающей 22 источника прерываний, для каждого из которых мо- жет быть выбран низкий или высокий уровень приоритета. Для каждого из источ- ников прерывания имеется один или более флагов запроса прерывания, флаг раз- решения прерывания и биг управления приоритетом прерывания. Кроме того, имеется бит глобальною разрешения прерываний. Каждый источник прорыва ния обслуживается специальной программой обработки прерывания ISR (Interrupt Service Subroutine)
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx 1.6.1. Логика прерываний Логика работы контроллера прерываний МК иллюстрируется схемой алго- ритма, показанной на Рис. 1.21,а. а) Рис. 1.21. Организация прерываний: а) логика прерываний; б) структура подпрограммы обработки прерывания. Векторное прерывание реализуется путем выполнения аппаратного вызова подпрограммы обработки прерывания LCALL Vector, где Vector — вектор, т. е. ад- рес подпрограммы обработки прерывания, вычисляемый по формуле Vector = 3 + 8-V, где V— приоритетный порядковый номер источника прерывания. Главным отличием этой команды от обычной команды вызова подпрограм- мы LCALL является то, что кроме запоминания адреса возврата в стеке МК за- поминает уровень программы. Уровень программы имеет три логических значе- ния: главная программа (Main), подпрограмма обработки прерывания с низким приоритетом (1SR 0) и подпрограмма обработки прерывания с высоким при- оритетом (ISR 1). Согласно Рис. 1.21,а после выполнения каждой очередной ко- манды МК проверяет, не является ли эта команда командой возврата из подпро- граммы обработки прерывания RET1. Эта команда, в отличие от обычной ко-
1.6. Система прерыв нии манды возврата из подпрограммы RET, кроме загрузки адреса возврата из стека в программный счетчик МК восстанавливает уровень программы. Поэтому, если выполнена команда RETI, МК с конвейерной архитектурой должен выполним, по крайней мере еще одну команду, прежде чем он будет готов обработать оче редное прерывание. После каждой следующей команды МК проверяет состоя ние бита глобального разрешения прерываний ЕА (Global Interrupt Enable). Ес- ли ЕА = 0, то МК игнорирует все запросы и продолжает выполнение команд программы текущего уровня. Если ЕА= I, то действия МК обусловлены уров нем программы: если выполняется подпрограмма обработки прерывания с вы соким приоритетом (ISR1) — активные запросы прерывания игнорируются; ес- ли выполняется подпрограмма обработки прерывания с низким приоритетом (ISR_0) — блокируются запросы прерывания с низким приоритетом; если вы- полняется главная программа (Main) — анализируются все активные запросы прерывания. Под активным запросом понимается совпадение единичных состо яний флага запроса прерывания и флага разрешения прерывания. Анализ актив пых запросов производится путем выбора запроса с наименьшим приоритет- ным порядковым номером, сначала в группе высокого приоритета, а при отсутс- твии там активных запросов — в группе низкого приоритета (если она не блокирована). Если активный запрос не найден, выполнение программы про должается, если найден — вычисляется вектор прерывания и выполняется аппа ратный вызов подпрограммы обработки прерывания. Структура подпрограммы обработки прерывания приведена на Рис. 1.21,6. В теле подпрограммы размещается программный код необходимых функций. В процессе вычисления необходимых функций, естественно, могут быть задейство ваны регистры АСС, В, DPTR, R0...R7 и может измениться состояние регистра PSW. Поэтому перед выполнением необходимых функций следует запомнить со- держимое указанных регистров. Сохранение регистров PSW, АСС, В, DPTR про изводится, как правило, в стеке, а сохранение регистров R0...R7 — путем переклю чсния банка регистров. После выполнения необходимых функций, перед выпол пением команды возврата из обработки прерывания RET1, следует восстанови н. состояния указанных регистров. Поскольку биты переключения рабочего банка регистров находятся в регистре PSW (см. п. 1.1.3 настр. 16), восстановление содер жимого этого регистра автоматически восстанавливает и номер рабочего банка ре- I истров R0...R7. Еще одним существенным моментом в построении подпрограмм обработки прерывания является необходимость сброса флага запроса прерыва пня, так как большинство источников прерывания МК не имеют функции аппа ратного сброса флага запроса. Эта операция может быть выполнена в принципе в любом месте подпрограммы обработки прерывания, однако более правильно вы полнить это сразу при входе в подпрограмму, как это и показано на Рис. 1.21,6. Эго позволит избежать потери запросов, поступивших во время выполнения полпро раммы обработки прерывания. С учетом логики прерывании (см. Рис. 1.21,а) легко просчитать минимальное п максимальное время реакции процессора на прерывание. Активные запросы оцениваются приоритетным шифра тором в течение одного периода (цикла) сис icMiioii сипхропи laiiHii. 1 Io лому минимальное время реакции па прерывание со
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx ставит 5 периодов синхронизации: I — для распознавания и кодирования вектора прерывания и 4 — для выполнения аппаратной команды LCALL Vector. Макси- мальное время реакции на прерывание будет тогда, когда запрос прерывания рас- познается во время выполнения команды возврата из подпрограммы обработки предшествующего прерывания RETL Согласно логике прерываний при этом должна быть выполнена еше одна команда, и в наихудшем случае это будет самая длительная команда деления DIV (см. Табл. 1.2). Нетрудно подсчитать, что в этом случае время реакции на прерывание составит 18 периодов системной синхрони- зации: 1 — для распознавания и кодирования вектора прерывания, 5 — для выпол- нения команды RET1, 8 — для выполнения команды DIV и 4 — для выполнения аппаратной команды LCALL Vector. Следует отметить, что если запрос прерыва- ния поступит во время выполнения подпрограммы обработки прерывания с оди- наковым или более высоким приоритетом, то оно не будет обслужено, пока не за- вершится выполнение подпрограммы обработки текущего прерывания, включая команду RETI, и пока не выполнится еще одна команда из прерванной ранее программы. 1.6.2. Источники и приоритет прерываний Полный список источников прерываний, векторов прерываний, соответству- ющие им флаги запроса прерываний, флаги разрешения прерываний и управле- ния приоритетом приведены в Табл. 1.4. Там же указан приоритетный порядок обслуживания прерываний, возможность битового доступа к флагу запроса пре- рывания, наличие функции аппаратного сброса флага запроса прерывания при аппаратном вызове подпрограммы обработки прерывания. Кроме того, в скобках указаны наименования регистров специальных функций и номера битов, в кото- рых размещены соответствующие флаги. Флаги разрешения и биты приоритета размещены в следующих регистрах: • регистр разрешения прерываний IE (Interrupt Enable), • регистр приоритета прерываний IP (Interrupt Priority), • регистр 1 разрешения дополнительных прерываний EIE1 (Extended Interrupt Enable 1), • регистр 2 разрешения дополнительных прерываний EIE2 (Extended Interrupt Enable 2), • регистр 1 приоритета дополнительных прерываний EIP1 (Extended Interrupt Priority 1), • регистр 2 приоритета дополнительных прерываний EIP2 (Extended Interrupt Priority 2), а флаги запроса прерываний — в регистрах управления соответствующих пе- риферийных узлов. Адреса этих регистров можно определить по данным Табл. 1.1.
1.6. Система прерываний Таблица 1.4. Список прерываний Источник прерывания Вектор прерывания Приоритетный порядок Флаг запроса прерывания Бит- адресуемый? Аппаратный сброс? Флаг разрешения прерывания Управление приоритетом Сброс оооон Выс- ший Нет — — Всегда разрешено Всегда высший Внешнее прерывание 0 (INTO) 0003 н 0 IE0 (TCON.I) Да Да ЕХ0(1Е.0) PXO(IP.O) ПереполнениетаймераО ооовн I TF0 (TCON.5) Да Да ETO(IE.I) PTO(IP.I) Внешнее прерывание I (INTI) 00I3H 2 IEI (TCON.3) Да Да EXI (IE.2) PXI (IP.2) Переполнение таймера I 001 вн 3 TFI (TCON.7) Да Да ETI (IE.3) PTI (IP.3) Последовател ьн ы й интерфейс UART0 0023 Н 4 RIO (SCON0.0) TIO(SCONO.I) Да Да — ES0(IE.4) PSOU P.4) Переполнение таймера 2 (или EXF2) 002ВН 5 TF2 (T2CON.7) Да — ET2(IE.5) PT2(IP5) Последовательный интерфейс SPI 0033 н 6 SPIF (SPI0CN.7) Да — ESPIO (EIEI.0) PSPIO(EIPI.O) Последовательный интерфейс SMBus 003 в н 7 SKSMB0CN.3) Да — ESMB0 (EIEI.l) PSMB0 (EIPI.I) Оконный компаратор преобразователя ADC0 0043 Н 8 AD0WINT (ADC0CN.2) Да — EWADC0 (EIEI.2) PWADC0 (EIPI.2) Программируемый массив счетчиков РСА 004ВН 9 CF(PCA0CN.7) CCFn (PCAOCN.n) Да Да — EPCA0 (EIEI.3) PPCA0 (EIPI.3) Компаратор 0, падающий фронт 0053Н 10 CP0FIF (CPT0CN.4) — — ECP0F (EIE1.4) PCP0F (EIPI.4) Компаратор 0, нарастающий фронт 005 В Н II CP0RIF (CPT0CN.5) — — ECP0R (EIEI.5) PCP0R (EIPI.5) Компаратор I. падающий фронт 0063 н 12 CPIFIF (CPTICN.4) — — ECP1F (EIEI.6) PCPIF (EIPI.6) Компаратор I, нарастающий фронт 006ВН 13 CPIRIF (CPTICN.5) — — ECPIR (EIEI.7) PCPIR (EIPI.7) 11ереполнение таймера 3 0073 Н 14 TF3 (TMR3CN.7) — — ET3(EIE2.0) PT3(EIP2.O) Конец преобразования преобразователя ADC0 007ВН 15 AD0INT (ADC0CN.5) Да — EADC0 (EIE2.I) PADC0 (EIP2.I) 1 (среполнение таймера 4 0083 Н 16 TF4(T4CON.7) — — ET4(EIE2.2) PT4(EIP2.2) Конец преобразования преобразователя ADCI 008 В Н 17 ADIINT (ADC1CN.5) — — EADC1 (EIE2.3) PADCI (EIP2.3) Внешнее прерывание 6 0093 Н 18 IE6 (P3IF.5) — — EX6(EIE2.4) PX6(EIP2.4) Внешнее прерывание 7 009ВН 19 IE7(P3IE6) — — EX7 (EIE2.5) PX7(EIP2.5) 11оследовательный интерфейс UARTI 00A3H 20 RI1 (SCON1.0) Til (SCONI.I) — — ESI (EIE2.6) PSI (EIP2.6) loioBiiocTb внешнего кристаллического генератора 00ABH 21 XTLVLD (OSCXCN.7) — — EXVLD (EIE2.7) PXVLD (EIP2.7) Кроме того, внешние прерывания 0 и 1 могут быть сконфигурированы как прерывания по фронту пли по уровню сигнала, в зависимости от битов ITO, I Г1 |>п истра управления таймерами TCON. Если прерывание сконфигурировано как прерывание по фрон ту, то флш шпроса прерывания 1Е0 или IEI (см. Табл. 1.4) ус-
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8O51Fxxx тапавливается падающим (отрицательным) фронтом на соответствующем входе INTO или INT1, а сбрасывается при переходе процессора к подпрограмме обра- ботки прерывания. Если прерывание сконфигурировано как прерывание по уровню сигнала, то состояние флага запроса прерывания будет равно логической I при низком активном уровне сигнала на входе и логическому 0 — при высоком уровне. Это значит, что внешняя схема должна сохранять активный уровень на соответствующем входе до тех пор, пока процессор не распознает прерывание и нс выполнит аппаратный вызов подпрограммы обработки прерывания, и должна спять этот уровень до возврата процессора из подпрограммы обработки прерыва- ния во избежание ее повторного вызова. Внешние прерывания 6 и 7 (см. Табл. 1.4) являются прерываниями по фронту соответствующего входного сигнала, однако могут быть сконфигурированы как прерывания по падающему или нарастающему фронту, в зависимости от состоя- ния битов IE6CF и IE7CF регистра флагов прерывания порта 3 P3IF. Правильную установку всех необходимых флагов и управляющих битов в про- цессе инициализации МК удобно и просто выполнить с помощью Мастера Кон- фигурации (см. п. 2.4 на стр. 121). 1.7. Режимы уменьшенного потребления энергии Кроме основного режима выполнения программы RUN, МК может нахо- диться в одном из двух режимов уменьшенного энергопотребления IDLE (холос- той ход) или STOP (останов), как это показано на Рис. 1.22. Рис. 1.22. Режимы уменьшенного потребления энергии.
1.7. Режимы уменьшенного потребления энергии 1.7.1. Режим IDLE Переход МК из режима RUN в режим IDLE происходит после установки в I бита IDLE (бит 0) в регистре управления энергопотреблением PCON (Power Control). В этом режиме процессор остановлен, содержимое памяти данных со- храняется, однако генератор продолжает работать, продолжают работать и пери- ферийные устройства, запущенные до введения этого режима, а также контрол- лер прерываний. Останов процессора позволяет снизить потребление энергии в этом режиме до уровня приблизительно 10% от уровня режима RUN. Выход из режима IDLE возможен либо по прерыванию, либо в результате сброса (см. Рис. 1.22). Если выход из режима IDLE произошел в результате пре- рывания, то бит IDLE в регистре PCON сбрасывается и процессор возобновляет выполнение команд. Прежде всего будет выполнена подпрограмма обработки прерывания, вызвавшего возобновление работы процессора, затем управление будет передано команде, непосредственно следующей за командой, вызвавшей установку бита IDLE в регистре PCON и введение режима IDLE. Если выход из режима IDLE произошел в результате внутреннего или вне- шнего сброса, то процессор выполняет всю последовательность аппаратного сброса и начинает выполнение программы с адреса 0000Н. Одним из источников внутреннего сброса может быть сторожевой таймер WDT, если он был разрешен до введения режима IDLE. В этом случае по завершении цикла отсчета стороже- вой таймер вызовет сброс и возврат процессора в режим выполнения программы RUN. Это страхует процессор от случайного перехода в режим IDLE в результате случайной записи в соответствующий бит регистра PCON при воздействии по- мех. Если по условиям работы проектируемой системы МК должен находиться в режиме уменьшенного энергопотребления IDLE значительное время, то до вве- дения этого режима следует запретить работу сторожевого таймера (см. п. 1.5.2 на стр. 44). Это позволяет снизить потребление энергии в этом режиме до уровня приблизительно 1% от уровня режима RUN. 1.7.2. Режим STOP Переход МК из режима RUN в режим STOP происходит после установки в I бита STOP (бит I) в регистре управления энергопотреблением PCON. В этом ре- жиме процессор остановлен, содержимое памяти данных сохраняется, внутрен- ний генератор остановлен, периферийные устройства переводятся в выключен- ное состояние. Каждое из аналоговых периферийных устройств может быть вы- ключено индивидуально до введения режима STOP. Все это позволяет снизить потребление энергии в этом режиме до уровня приблизительно 0.1% от уровня режима RUN. Выход из режима STOP возможен только в результате внешнего или внутрен- нею сброса (см. Рис. 1.22). При этом процессор выполняет всю последователь- ность аппаратного сброса и начинает выполнение программы с адреса 0000Н. Гели разрешена работа детектор i нарушения синхронизации MCD, го через 1<И> мкс после перехода в режим STOP произойдет сброс МК из-за отсутствия
Глава 1. Архитектура микроконтроллеров смешанного сигнала СЫ)!> 11 ххх синхроимпульсов и он возвратится в режим RUN. Если по условиям работы про- ектируемой системы МК должен находиться в режиме уменьшенною энергопот- ребления STOP значительное время, то до введения этого режима следует запре- тить работу детектора нарушения синхронизации (см. п. 1.5.1 на стр. 41). 1.8. Таймеры В состав цифровых периферийных устройств МК входят пять счетчиков/тай- меров, два из которых совместимы со счетчиками/таймерами стандартного МК 8051, а три оставшихся — это 16-битные таймеры с автоперезагрузкой, которые можно использовать совместно с аналого-цифровыми преобразователями, конт- роллерами последовательных интерфейсов или как таймеры общего назначения. Они могут быть использованы для измерения временных интервалов, счета вне- шних событий или генерирования периодических прерываний. Каждый из тай- меров может работать в нескольких режимах. В режиме таймера каждый из таймеров производит инкремент своих регист- ров на каждый импульс синхронизации таймера. Частота синхронизации может быть выбрана равной как частоте синхронизации процессора, так и частоте про- цессора, поделенной на 12. Выбор последней опции делает таймер совместимым с таймером стандартного МК 8051. Первая из опций хорошо подходит для приме- нений, требуюших более высокого быстродействия и точности. В режиме счета внешних событий инкремент регистра таймера происходит в момент отрицательного перепада напряжения на выбранном входе. Максималь- ная частота следования событий не должна превышать при этом 1/4 частоты сис- темной синхронизации. Сигнал событий может быть непериодическим, однако для надежного распознавания события должен удерживаться на каждом из уров- ней, по меньшей мере, в течение двух периодов системной синхронизации. Такой подход позволяет отфильтровывать случайные выбросы сигнала, практически всегда присутствующие на выводах микросхем. 1.8.1. Таймеры и режимы их работы 1.8.1.1. Таймер 0 и таймер 1 Каждый из таймеров имеет по два 8-битных регистра, соответственно стар- ший Н (High) и младший L (Low): THO, TL0 и THI, TLL Таймеры могут работать в четырех основных режимах: 0, 1,2 и 3 (в режиме 3 — только таймер 0). Режим 0:13-битный счетчик/таймер Функциональная схема таймера 0 в режиме 0 приведена на Рис. 1.23. Схема таймера 1 в этом режиме аналогична. Старший регистр таймера ТНО содержит 8 старших бит 13-битного таймера, а младший регистр TL0 — 5 младших биг, размещенных в младших разрядах
1.8. Таймеры CKCON Т 4 М Т 2 М т 1 м т 0 м т MOD G С т т G С т т А / 1 1 А / 0 0 Т т м м Т т м м Е 1 1 1 0 Е 0 1 0 Рис. 1.23. Функциональная схема таймера 0 в режиме 0. TL0.4...TL0.0. Содержание старших разрядов этого регистра TL0.7...TL0.5 в этом режиме не определено и должно маскироваться или игнорироваться при считы- вании состояния таймера. Работа таймера контролируется тремя регистрами специальных функций: ре гистром управления синхронизацией CKCON (Clock Control Register), регистром режима таймеров TMOD (Timer Mode Register) и регистром управления таймера ми TCON (Timer Control Register). Бит выбора источника синхронизации С/ТО (Counter/Timei 0 Select) (TMOD.2) определяет источник синхронизации: если значение этого бита — 0, то импульсы счета поступают от генератора синхронизации МК (режим таймера); если значение лого бита — 1, то инкремент счетчика реализуется в момент отрицательного пере- пада напряжения на внешнем входе ТО, выбираемом с помощью матричного ком- мутатора (см. п. 1.3.2 на стр. 32). Импульсы от генератора синхронизации МК могут поступать как напрямую, так и через делитель частоты на 12, в зависимости от со- стояния бита ТОМ (TimerO Clock Select) (CKCON.3). Бит запуска таймера TRO (Timer 0 Run Control) (TCON.4) разрешает счет вход пых импульсов TCLK (Timer Clock) при условии, что бит управления стробирова- нием GATEO (TimerO Gate Control) (TMOD.3) находится в состоянии логическою 0. Если выбрана функция стробирования (GATEO = 1), то счет разрешен, если па внешнем входе INTO установлен высокий потенциал. Эта функция используется для измерения длительности импульса на входе INTO, выбираемом также с номо шыо матричного коммутатора на этапе конфигурирования выводов МК. Сброс бита TR0 нс обнуляет регистры таймера. Перед запуском таймера в ре гнетры ТНО и TI 0 должны быть ыписапы желаемые значения. В процессе счета таймер инкрементируется до шачения IFFFH, после чего переходит в состояние
Глава 1. Архитектура микроконтроллеров смешанного сигнала С80511ххх ООООН и продолжает счет. В момент обнуления таймера 0 устанавливается флаг переполнения TFO (Timer 0 Overflow Flag) (TCON.5), который может вызвать со- ответствующее прерывание (см. п. 1.6.2 на стр. 48). Таймер 1 работает в этом режиме аналогично. Режим 1:16-битный счетчик/таймер В этом режиме таймеры 0 и I работают аналогично режиму 0, за тем лишь ис- ключением, что регистры TL0 и ТЫ используются полностью и переполнение аймеров наступает после достижения значения FFFFH. Режим 2:8-битный счетчик/таймер с автоперезагрузкой Функциональная схема таймера 0 в режиме 2 приведена па Рис. 1.24. Схема таймера 1 в этом режиме аналогична. В этом режиме регистр TL0 используется для счета, а регистр ТНО — для запо- минания перезагружаемого значения. В момент переполнения регистра TL0 (т. е. при переходе из состояния FFH в состояние ООН) происходит установка флага переполнения TF0 и перезагрузка в регистр TL0 значения, установленного в ре- гистре ТНО. Для корректности первого цикла при периодическом режиме работы перед запуском таймера регистры ТНО и TL0 следует инициализировать одним и гем же значением. В качестве источников импульсов счета в этом режиме исполь- >уются те же источники, что и в режимах 0 и 1. Таймер 1 работает в этом режиме аналогично. I < ’К iiMiiiiiBn и пни х *ма таймера 0 в режиме
1.8. Таймеры Режим 3: Ава 8-битных счетчика/таймера (только таймер О) Функциональная схема таймера 0 в режиме 3 приведена на Рис. 1.25. В этом режиме регистры ТНО и TL0 представляют собой два отдельных 8-бит- ных счетчика/таймера. Рис. 1.25. Функциональная схема таймера 0 в режиме 3. При этом счетчик/таймер на базе TL0 использует биты управления и состоя- ния таймера 0 в регистрах TCON и TMOD: TR0, С/ТО, GATE0 и TF0. В качестве временной базы он может использовать как внутренние, так и внешние сигналы. Счетчик/таймер на базе ТНО использует для счета только сигналы внутренней синхронизации. Он запускается сигналом запуска таймера 1 TR1 и устанавливает ври переполнении флаг таймера 1 TF1, что обеспечивает генерирование преры- вания от таймера 1, если оно разрешено. Собственно таймер 1 неактивен в режиме 3, поэтому, если таймер 0 работает в режиме 3, таймер 1 может быть остановлен и запущен вновь путем переключения его в режим 3 и обратно. Когда таймер 0 работает в режиме 3, таймер 1 может ра ботать в режимах 0, 1 или 2, однако не может быть синхронизирован внешним не- годником и не может устанавливать флаг переполнения, а соответственно гене- рировать прерывания. Однако он может быть использован для синхронизации контроллеров последовательного интерфейса UART0 и/или UART1. Структуры управляющих регистров'I CON и TMOD приведены соответствен- но па Рис. 1.26 и 1.27.
Глава 1. Архитектура микроконтроллеров смешанного сигнала 8( )611 ххх R/W R/W R/W R/W R/W R/W H/W R/W | TF1 TR1 | TF0 | TR0 | IE1 | 1Т1 Г пиП 1Т0 | Значение после сброса: Адрес SFR: 88Н 1 о 1 о | 0 0 о 1 0 1 о_ J 0 1 Бит 7 Бит 6 Бит 5 Бит 4 БитЗ Бит 2 Бит 1 БитО Рис. 1.26. Регистр управления таймерами 0 и 1 (TCON). Бит 7 TF1 — флаг переполнения таймера 1. Устанавливается аппаратно при переполнении таймера 1. Может сбра- сываться программно, однако автоматически сбрасывается аппаратно в момент перехода процессора по вектору к подпрограмме обработки прерывания таймера 1. Бит 6 TR1 — бит управления таймера 1. 0: таймер 1 запрещен. 1: таймер 1 разрешен. Бит 5 TF0 — флаг переполнения таймера 0. Устанавливается аппаратно при переполнении таймера 0. Может сбра- сываться программно, однако автоматически сбрасывается аппаратно в момент перехода процессора по вектору к подпрограмме обработки прерывания таймера 0. Бит 4 TR0 — бит управления таймера 0. 0: таймер 0 запрещен. 1: таймер 0 разрешен. Бит 3 IE1 — флаг внешнего прерывания 1. Устанавливается аппаратно, если обнаружен падающий фронт или низ- кий уровень сигнала (соответственно состоянию бита ITI) на входе INT1. Может сбрасываться программно, однако автоматически сбра- сывается аппаратно в момент перехода процессора по вектору к под- программе обработки внешнего прерывания 1, если ITI = 1. Представ- ляет собой инверсию сигнала на входе INT1, если IT1 =0. Бит 2 IT1 — бит выбора типа внешнего прерывания 1. 0: прерывание запускается низким уровнем сигнала INT1. 1: прерывание запускается падающим фронтом сигнала INT1. Бит 1 IE0 — флаг внешнего прерывания 0. Устанавливается аппаратно, если обнаружен падающий фронт или низ- кий уровень сигнала (соответственно состоянию бита IT0) на входе INTO. Может сбрасываться программно, однако автоматически сбра- сывается аппаратно в момент перехода процессора по вектору к под- программе обработки внешнего прерывания 0, если ITO = 1. Представ- ляет собой инверсию сигнала на входе INTO, если IT0 = 0. Бп г 0 IT0 — бит выбора типа внешнего прерывания 0. 0: прерывание запускается низким уровнем сигнала INTO. I: прерывание запускается падающим фронтом сигнала INTO.
1.8. Таймеры R/W R/W R/W R/W R/W R/W R/W R/W | GATE1 | С/Т1 | Т1М1 | Т1М0 | GATED | С/ТО | Т0М1 | T0M0 | Значение после сброса: Адрес SFR: D0H 1 о | 0 1 о 1 о 1 о | 0 1 о 0 | Бит 7 Бит 6 Бит 5 Бит 4 БитЗ Бит 2 Бит 1 БитО Рис. 1.27. Регистр режима таймеров 0 и 1 (TMOD). Бит 7 GATE1 — бит управления стробом таймера 1. 0: таймер 1 разрешен, когда TRI = 1 независимо от состояния 1NTI. 1: таймер 1 разрешен, если TRI = 1 и INTI = I. Бит 6 С/Т1 — бит выбора режима счетчик/таймер. 0: режим таймера, таймер 1 инкрементируется синхроимпульсами, 1: режим счетчика, таймер 1 инкрементируется падаюшим фронтом импульсов на входе Т1. Биты 5, 4 Т1М1, Т1М0 — биты выбора режимов таймера 1. Т1М1 Т1М0 Режим 0 0 Режим 0: 13-битнын счетчик/таймер 0 1 Режим 1: 16-битный счетчик/таймер 1 0 Режим 2: 8-битный счетчик/таймер с автоперезагрузкой I 1 Режим 3: таймер не активен Бит 3 GATE0 — бит управления стробом таймера 0. 0: таймер 0 разрешен, когда TRO = 1 независимо от состояния INTO. I: таймер 0 разрешен, если TRO = 1 и INT1 = 0. Бит 2 C/T0 — бит выбора режима счетчик/таймер. 0: режим таймера, таймер 0 инкрементируется синхроимпульсами. 1: режим счетчика, таймер 0 инкрементируется падаюшим фронтом импульсов на входе ТО. Биты 1,0 TOMI, T0M0 — биты выбора режимов таймера 0. Т0М1 томо Режим 0 0 Режим 0: 13-битный счетчик/таймер 0 1 Режим 1: 16-битный счетчик/таймер 1 0 Режим 2: 8-битный счетчик/таймер с авто перезагрузкой 1 1 Режим 3: два 8-битных счетчика/таймера 1 8.1.2. Таймер 2 Таймер 2 представляет собой 16-битный таймер, содержащий регистры ГН2 и 11.2. Гак же как и таймеры 0 и 1, он может использовать как источник синхропи i.iuiiil импульсы системной синхропи кщми или отрицательные перепады сигнала и* внешнем входе Т2. Таймер 2 предоставляет разработчику возможности, кого рыми не обладают таймеры Ou I. Он может работать в грех основных режимах.
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx 16-битный счетчик/таймер с захватом, 16-битный счетчик/таймер с автоперезаг- рузкой и генератор импульсов синхронизации для последовательного интерфейса UART0. Работа таймера 2 контролируется двумя регистрами специальных функ- ций: регистром управления синхронизацией CKCON (Clock Control Register) и регистром управления таймера 2 T2CON (Timer 2 Control Register). Режим 0:16-битный счетчик/таймер с захватом Функциональная схема таймера 2 в режиме 0 приведена на Рис. 1.28. Этот режим выбирается путем установки бита выбора захвата/перезагрузки CP/RL2 (Capture/Reload Select) (T2CON.O), бита разрешения внешнего входа таймера 2 EXEN2 (Timer 2 External Enable) (T2CON.3) и бита управления запус- ком таймера 2 TR2 (Timer 2 Run Control) (T2CON.2). В этом случае отрицатель- ный перепад напряжения на входе Т2ЕХ (конкретный вывод порта выбирается с помощью матричного коммутатора) приводит к захвату значений в регистрах тай- мера ТН2 и TL2 и запоминанию их в регистрах захвата RCAP2H и RCAP2L (Timer 2 Capture Register), а также к установке флага внешнего прерывания таймера 2 EXF2 (Timer 2 External Flag) (T2CON.6), инициирующего прерывание таймера 2. В зависимости от состояния бита выбора источника синхронизации С/Т2 (Counter/Timer 2 Select) (T2CON.1) таймер 2 производит подсчет импульсов син- хронизации или внешних событий в виде отрицательных перепадов напряжения па внешнем входе Т2 (конкретный вывод порта выбирается с помощью матрич- ного коммутатора). Что касается импульсов синхронизации, то в зависимости от состояния бита выбора синхронизации Т2М (Timer Clock Select) (CKCON.5) тай- мер производит счет импульсов системной синхронизации SYSCLK (Т2М = 1) или SYSCLK/12 (Т2М = 0). В любом случае при переполнении таймера 2 (т. е. при Рис. 1.28. Функциональная схема таймера 2 в режиме 0.
1.8. Таймеры переходе из состояния FFFFH в состояние 0000Н) устанавливается флаг перепол- нения таймера 2 TF2 (Timer 2 Overflow Flag) (T2CON.7), что также обеспечивает прерывание от таймера 2, если оно разрешено. Режим 1:16-битный счетчик/таймер с автоперезагрузкой Функциональная схема таймера 2 в режиме I приведена на Рис. 1.29. В этом режиме переполнение таймера 2 не только приводит к установке флага TF2 и соответствующему прерыванию, но и перезагружает значения из регистров захвата RCAP2H и RCAP2L в регистры ТН2 и TL2, после чего таймер продолжает свою работу. Этот режим устанавливается путем обнуления бита CP/RL2 и уста- новки бита TR2. Если при этом бит EXEN2 = 1, то отрицательный перепад напря- жения на входе Т2ЕХ также приводит к перезагрузке таймера и прерыванию бла- годаря установке флага EXF2. Если бит EXEN2 = 0, то перепады сигнала на входе Т2ЕХ игнорируются. Режим 2: Генератор импульсов синхронизации для последовательного интерфейса Функциональная схема таймера 2 в режиме 2 приведена на Рис. 1.30. Таймер 2 может быть использован для синхронизации последовательного ин- ерфейса UART0, когда последний работает в режимах 1 или 3 (см. п. 1.9.3 на стр. В9). В этом режиме он работает с автоперезагрузкой, как в режиме 1, однако флаг переполнения TF2 не устанавливается и прерывание не генерируется. Факт пере- полнения таймера используется для генерирования импульсов синхронизации UART0. Переполнения таймера 2 могут быть использованы независимо для синх- ропизацин приемника н/или передатчика UART0.
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx С/Т2 Рис. 1.30. Функциональная схема таймера 2 в режиме 2. Режим 2 выбирается путем установки бита флага синхронизации приема RCLK.0 (Receive Clock Flag for UARTO) (T2CON.5) и/или бита флага передачи TCLK.0 (Transmit Clock Flag for UARTO) (T2CON.4). Если хотя бы один из этих би- гов установлен, то таймер работает в режиме автоперезагрузки независимо от то- го, в каком состоянии находится бит CP/RL2. В отличие от других режимов в ка- честве временной базы таймер 2 использует здесь SYSCLK/2. При этом частота следования импульсов синхронизации приемника RXO Clock и/или передатчика ТХО Clock, т. е. скорость передачи BR (Baud Rate), составит BR = SYSCLK/((65536 - [RCAP2H, RCAP2L])-32). В альтернативном варианте можно использовать для синхронизации вне- шний источник, подключаемый к выводу Т2. Для выбора этого варианта следует установить бит С/Т2 = 1. Для этого случая скорость передачи составит BR = FCLk/((65536- [RCAP2H, RCAP2L])16), где FCLk — частота сигнала на входе Т2; [RCAP2H, RCAP2L] — 16-битное значение в регистрах захвата. Следует отметить, что в этом режиме вход Т2ЕХ может быть использован как дополнительный источник внешних прерываний: если установлен бит EXEN2 = 1, то отрицательный перепад напряжения на входе Т2ЕХ приведет кус-
1.8. Таймеры тановке флага EXF2, который соответственно может инициировать прерывание от таймера 2, если оно в данный момент разрешено (см. Рис. 1.30). Структура управляющего регистра T2CON приведена на Рис. 1.31. R/W R/W R/W R/W R/W R/W R/W R/W TF2 | EXF2 | RCLK0 1TCLK0 1 EXEN2 | TR2 I С/Т2 I CP/RL2 I Значение после сброса: Адрес SFR: С8Н 1 о 1 о 1 о | 0 0 | 0 1 о I о | Бит 7 Бит 6 Бит 5 Бит 4 БитЗ Бит 2 Бит 1 БитО Рис. 1.31. Регистр управления таймера 2 (T2CON). Бит 7 TF2 — флаг переполнения таймера 2. Устанавливается аппаратно при переполнении таймера 2. Когда разре- шено прерывание от таймера 2, установка этого бита вызывает переход процессора по вектору к подпрограмме обработки прерывания таймера 2. Этот бит автоматически не сбрасывается аппаратно и должен сбрасы ваться программно. Флаг не устанавливается, если RCLK0 и/или TCLK0 находятся в состоянии логической 1. Бит 6 EXF2 — внешний флаг таймера 2. Устанавливается аппаратно, в момент перехода с высокого уровня на- пряжения на низкий на входе Т2ЕХ при наличии разрешения EXEN2 = 1, вызывающего захват значения таймера 2 или его перезагруз- ку. Когда разрешено прерывание от таймера 2, установка этого бита вы- зывает переход процессора по вектору к подпрограмме обработки пре- рывания таймера 2. Этот бит автоматически не сбрасывается аппаратно и должен сбрасываться программно. Бит 5 RCLK0 — флаг синхронизации приемника UARTO. Выбирает, какой из таймеров используется для синхронизации прием ника UARTO в режимах 1 или 3. 0: таймер 1, 1: таймер 2. I >ит 4 TCLK0 — флаг синхронизации передатчика UARTO. Выбирает, какой из таймеров используется для синхронизации передат- чика UARTO в режимах 1 или 3. 0: таймер 1, 1: таймер 2. Ьп г 3 EXEN2 — разрешение внешнего входа таймера 2. Разрешает в момент перехода с высокого уровня напряжения на низкий на входе Т2ЕХ захват значения таймера 2 или его перезагрузку в режимах 0 и 1. 0: переход на входе Т2ЕХ игнорируется, 1: переход на входе Т2ЕХ вызывает захват или перезагрузку. Ьп । 2 TR2 — биг управления таймера 2. 0: таймер 2 laiipemeii, I: таймер 2 разрешен.
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx Бит I С/Т2 — бит выбора режима счетчик/таймер. 0: режим таймера, таймер 2 инкрементируется синхроимпульсами. I: режим счетчика, таймер 2 инкрементируется падающим фронтом им- пульсов на входе Т2. Бит 0 CP/RL2 — бит выбора режима захват/перезагрузка. Если для захвата или перезагрузки используется падающий фронт на входе Т2ЕХ, то бит EXEN2 должен быть в состоянии логической I. Если установлен бит RCLK0 и/или TCLK0, состояние данного бита игнори- руется и таймер 2 работает в режиме автоперезагрузки. 0: автоперезагрузка при переполнении таймера 2 или падающем фронте на Т2ЕХ. I: захват значения таймера по падающему фронту на Т2ЕХ. 1.8.1.3. Таймер 3 Таймер 3 представляет собой 16-битный таймер, образованный регистрами TMR3H и TMR3L. Таймер 3 работает только в режиме с автоперезагрузкой, как показано на функциональной схеме Рис. 1.32. Значение кода перезагрузки опре- деляется состоянием регистров TMR3RLH и TMR3RLL (Timer 3 Reload Value). Управление работой таймера 3 осуществляется с помощью управляющего регист- ра TMR3CN (Timer 3 Control Register). Как источник синхронизации таймер 3 может использовать импульсы системной синхронизации SYSCLK или SYSCLK/12, в зависимости от состояния управляющего бита ТЗМ (Timer 3 Clock Select) (TMR3CN.1), или импульсы внешней синхронизации на выводе XTL1 внешнего генератора синхронизации. В последнем случае реализуется режим ча- сов реального времени RTC (Real-Time Clock Mode), который вводится путем ус- тановки управляющего бита T3XCLK (Timer 3 External Clock Select) (TMR3CN.0). Частота импульсов на входе таймера 3 TCLK в этом режиме равна частоте им- пульсов на входе XTL1, поделенной на 8, при этом состояние бита ТЗМ игнори- руется. Это позволяет таймеру 3 осуществлять счет импульсов прецизионной час- T3XCLK /*ис. 1.32. Функциональная схема таймера 3
1.8. Таймеры тоты на входе XTL1, в то время как все остальные узлы МК синхронизируются от внутреннего высокочастотного генератора. Кроме этого таймер 3 может быть использован для запуска аналого-цифровых преобразователей, а также для контроля длительности фазы низкого уровня син хроимпульса последовательного интерфейса SMBus (см. п. 1.9.1 на стр. 76). Структура управляющего регистра TMR3CN приведена на Рис. 1.33. R/W R/W R/W R/W R/W R/W R/W R/W TF3 - - - - | TR3 | ТЗМ |T3XCLK| Значение после сброса: Адрес SFR: 91Н 1 о о 0 0 о 0 I о I 0 I Бит 7 Бит 6 Бит 5 Бит 4 БитЗ Бит 2 Бит 1 Бит 0 Рис. 1.33. Регистр управления таймера 3 (TMR3CN). Бит 7 TF3 — флаг переполнения таймера 3. Устанавливается аппаратно при переполнении таймера 3. Когда разре шено прерывание от таймера 3, установка этого бита вызывает переход процессора по вектору к подпрограмме обработки прерывания тайме- ра 3. Этот бит автоматически не сбрасывается аппаратно и должен сбрасываться программно. Биты 6...3 Не используются. Бит 2 TR3 — бит управления таймера 3. 0: таймер 3 запрещен. 1: таймер 3 разрешен. Бит 1 ТЗМ — выбор синхронизации таймера 3. Этот бит управляет делением частоты системной синхронизации SYSCLK на входе таймера 3. 0: таймер 3 использует SYSCLK/12. 1: таймер 3 использует SYSCLK. Бит 0 T3XCLK — выбор внешней синхронизации таймера 3. 0: таймер 3 использует SYSCLK (ТЗМ = 1) или SYSCLK/12 (ТЗМ = 0). 1: таймер 3 использует частоту на входе XTAL1, деленную на 8. 1.8.1.4. Таймер 4 Таймер 4 представляет собой 16-битный таймер, образованный регистрами 1114 и TL4. Таймер 4 предоставляет разработчику возможности, которыми не об- ладают таймеры 0 и 1. Он может работать в трех основных режимах: 16-битный счетчик/таймер с захватом, 16-битный счетчик/таймер с автоперезагрузкой и ге- нератор импульсов синхронизации для последовательного интерфейса UART1. Так же как и таймеры 0 и 1, он может использовать как источник синхронизации импульсы системной синхронизации или отрицательные перепады сигнала па внешнем входе Т4. Работа таймера 4 контролируется двумя регистрами специаль пых функций: регистром упр тления синхронизацией CKCON (Clock Control
Глава 1. Архитектура микроконтроллеров смешанного СИГп то < Лх'И/югх Register) и регистром управления таймера 4 T4CON (Inner 4 Control Register). В зависимости от состояния бита выбора источники синхронизации С/Т4 (Counter/Timer 4 Select) (T4CON.1) таймер 4 производи! нодсчез импульсов син- хронизации или внешних событий в виде отрицательных перепадов напряжения па внешнем входе Т4 (конкретный вывод порта выбираемся с помощью матрич- ного коммутатора). Что касается импульсов синхропи мании, го и зависимости от состояния бита выбора синхронизации Т4М (Timer Clock Select) (CKCON.6) тай- мер производит счет импульсов системной синхропизацпп SYSC1.K (Т4М = 1) пли SYSCLK/12 (Т4М = 0). Режим 0:16-битный счетчик/таймер с захватом Функциональная схема таймера 4 в режиме 0 приведена па Рис. 1.34. Рис. 1.34. Функциональная схема таймера 4 в режиме 0. Этот режим выбирается путем установки бита выбора захвата/перезагрузки CP/RL4 (Capture/Reload Select) (T4CON.O), бита разрешения внешнего входа laiiMepa 4 EXEN4 (Timer 4 External Enable) (T4CON.3) и бита управления запус- ком таймера 4 TR4 (Timer 4 Run Control) (T4CON.2). В этом случае отрицатель- ный перепад напряжения на входе Т4ЕХ (конкретный вывод порта выбирается с помощью матричного коммутатора) приводит к захвату значений в регистрах тай- мера ТН4 и TL4 и запоминанию их в регистрах захвата RCAP4H и RCAP4L (Timer 4 Capture Register), а также к установке флага внешнего прерывания таймера 4 I XF4 (Timer 4 External Flag) (T4CON.6), инициирующего прерывание таймера 4. В зависимости от значения бита выбора источника синхронизации С/Т4 (Counter/Timer 4 Select) (T4CON. 1) таймер 4 производит подсчет импульсов син- хронизации или внешних событий в виде отрицательных перепадов напряжения па внешнем входе Т4 (конкретный вывод порта выбирается с помощью матрич
1.8. Таймеры ного коммутатора). Что касается импульсов синхронизации, то в зависимости от состояния бита выбора синхронизации Т4М (Timer Clock Select) (CKCON.6) тай- мер производит счет импульсов системной синхронизации SYSCLK (Т4М = I) или SYSCLK/12 (Т4М = 0). В любом случае при переполнении таймера 2 (т. е. при переходе из состояния FFFFH в состояние 0000Н) устанавливается флаг перепол- нения таймера 4 TF4 (Timer 4 Overflow Flag) (T4CON.7), что также обеспечивает прерывание от таймера 4, если оно разрешено. Режим 1:16-битный счетчик/таймер с автоперезагрузкой Функциональная схема таймера 4 в режиме I приведена на Рис. 1.35. Рис. 1.35. Функциональная схема таймера 4 в режиме 1. В этом режиме переполнение таймера 4 не только приводит к установке фла1а TF4 и соответствующему прерыванию, но и перезагружает значения из регистров захвата RCAP4H и RCAP4L в регистры ТН4 и TL4, после чего таймер продолжает спою работу. Этот режим устанавливается путем обнуления бита CP/RL4 и уста- новки бита TR4. Если при этом бит EXEN4 = 1, то отрицательный перепад напря- жения на входе Т4ЕХ также приводит к перезагрузке таймера и прерыванию бла- одари установке флага EXF4. Если бит EXEN4 = 0, то перепады сигнала на входе Г4ЕХ игнорируются. Режим 2: Генератор импульсов синхронизации для последовательного интерфейса Функциональная схема таймера 4 в режиме 2 приведена на Рис. 1.36. Кимер 4 может быть использован для синхронизации последовательного интер- фейса UART1, когда последний работает в режимах 1 или 3 (см. п. 1.9.3 на стр. 89). В лом режиме он работает с автоперс загрузкой. как в режиме 1, однако фла> переполнения ГЕ’4 не устанавливается и прерывание не генерируется. Факт пере-
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx С/Т4 Рис. 1.36. Функциональная схема таймера 4 в режиме 2. полнения таймера используется для генерирования импульсов синхронизации UART1. Переполнения таймера 4 могут быть использованы независимо для синх- ронизации приемника и/или передатчика UART1. Режим 2 выбирается путем установки бита флага синхронизации приема RCLK1 (Receive Clock Flag for UART1) (T4CON.5) и/или бита флага передачи TCLK1 (Transmit Clock Flag for UART1) (T4CON.4). Если хотя бы один из этих би- тов установлен, то таймер работает в режиме автоперезагрузки независимо от то- го, в каком состоянии находится бит CP/RL4. В отличие от других режимов в ка- честве временной базы таймер 4 использует здесь SYSCLK/2. При этом частота следования импульсов синхронизации приемника RX1 Clock и/или передатчика ТХ1 Clock, т. е. скорость передачи BR (Baud Rate), составит BR = SYSCLK/((65536 - [RCAP4H, RCAP4L])-32). В альтернативном варианте можно использовать для синхронизации вне- шний источник, подключаемый к выводу Т4. Для выбора этого варианта следует установить бит С/Т4 = 1. Для этого случая скорость передачи составит BR = FCLk/((65536 - [RCAP4H, RCAP4L|)16), где FC| к — частота сигнала на входе Т4; IRCAP4M, RCAP4L| — 16-битное значение и регистрах захвата.
1.8. Таймеры Следует отметить, что в этом режиме вход Т4ЕХ может быть использован как дополнительный источник внешних прерываний: если установлен биг EXEN4 = I, то отрицательный перепад напряжения на входе Т4ЕХ приведет к ус- тановке флага EXF4, который соответственно может инициировать прерывание от таймера 4, если оно в данный момент разрешено (см. Рис. 1.36). Структура управляющего регистра T4CON приведена на Рис. 1.37. R/W R/W R/W R/W R/W R/W R/W R/W TF4 | EXF4 |RCLK1|TCLK1 | EXEN4| TR4 | С/Т4 | CP/RL4 | Значение после сброса: Адрес SFR: С9Н 1 о 1 о 1 о | о 1 о | 0 1 о J о | Бит 7 Бит 6 Бит 5 Бит 4 БитЗ Бит 2 Бит 1 БитО Рис. 1.37. Регистр управления таймера 4 (T4CON). Бит 7 TF4 — флаг переполнения таймера 4. Устанавливается аппаратно при переполнении таймера 4. Когда разре- шено прерывание от таймера 4, установка этого бита вызывает переход процессора по вектору к подпрограмме обработки прерывания таймера 4. Этот бит автоматически не сбрасывается аппаратно и должен сбрасы ваться программно. Флаг не устанавливается, если RCLK1 и/или TCLK1 в состоянии логической 1. Бит 6 EXF4 — внешний флаг таймера 4. Устанавливается аппаратно в момент перехода с высокого уровня напря жения на низкий на входе Т4ЕХ при наличии разрешения EXEN4 = 1, вызывающего захват значения таймера 4 или его перезагрузку. Когда разрешено прерывание от таймера 4, установка этого бита вызывает пе- реход процессора по вектору к подпрограмме обработки прерывания таймера 4. Этот бит автоматически не сбрасывается аппаратно и должен сбрасываться программно. Бит 5 RCLK1 — флаг синхронизации приемника UARTl. Выбирает, какой из таймеров используется для синхронизации прием- ника UARTl в режимах 1 или 3. 0: таймер 1. 1: таймер 4. Бит 4 TCLK1 — флаг синхронизации передатчика UARTl. Выбирает, какой из таймеров используется для синхронизации передат- чика UARTl в режимах 1 или 3. 0: таймер 1. 1: таймер 4. 1>п г 3 EXEN4 — разрешение внешнего входа таймера 4. Разрешает в момент перехода с высокого уровня напряжения на низкий на входе T4FX захват значения таймера 4 или его перезагрузку в режимах 0 и I. 0: переход па входе Т4ЕХ игнорируется. 1: переход на входе T4IX цы бывает захват или перезагру 1ку.
[лава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx Бит 2 TR4 — бит управления таймера 4. 0: таймер 4 запрещен. I: таймер 4 разрешен. Вит I С/Т4 — бит выбора режима счетчик/таймер. 0: режим таймера, таймер 4 инкрементируется синхроимпульсами. I: режим счетчика, таймер 4 инкрементируется падающим фронтом им- пульсов на входе Т4. Бит О CP/RL4 — бит выбора режима захват/перезагрузка. Если для захвата или перезагрузки используется падающий фронт на входе Т4ЕХ, то бит EXEN4 должен быть в состоянии логической I. Если установлен бит RCLK1 и/или TCLK1, состояние данного бита игнори- руется и таймер 4 работает в режиме автоперезагрузки. 0: автоперезагрузка при переполнении таймера 4 или падающем фронте на Т4ЕХ. I: захват значения таймера по падающему фронту на Т4ЕХ. 1.8.2. Программируемый массив счетчиков Программируемый массив счетчиков РСАО (Programmable Timer Array) обес- печивает улучшенные функции таймеров, требуя со стороны процессора гораздо меньше ресурсов, чем стандартные счетчики/таймеры. РСАО содержит 16-бит- ный счетчик/таймер и пять 16-битных модулей захвата/сравнения, как это пока- зано на блок-схеме Рис. 1.38. Каждый модуль захвата/сравнения имеет соответс- твующую линию ввода/вывода СЕХп (п — номер модуля: 0...4), назначаемую с по- мощью матричного коммутатора на один из выводов портов ввода/вывода. 16- битный счетчик/таймер имеет программируемую с помощью мультиплексора синхронизации временную базу, включающую импульсы системной синхрониза- ции с разными коэффициентами деления (SYSCLK, SYSCLK/4, SYSCLK/12), импульсы внешней тактовой частоты, поделенной на 8 (режим реального време- ни), импульсы переполнения таймера 0 и внешний сигнал на входе ЕС1, назнача- емом с помощью матричного коммутатора на один из выводов портов ввода/вы- вода. Каждый модуль может работать в одном из шести режимов: захват по фрон- ту на входе СЕХп, программный таймер, быстродействующий выход, частотный выход, 8-битный или 16-битный ШИМ. Работа РСАО контролируется с помощью регистров специальных функций. Блок-схема счетчика/таймера программируемого массива счетчиков приведе- на на Рис. 1.39. Счетчик/таймер состоит из двух 8-битных регистров: РСАОН и PCA0L. Дополнительный регистр-защелка, управляемый сигналом чтения млад- шего регистра PCA0L, обеспечивает возможность бессбойного считывания со- держимого счетчика/таймера в любой момент времени без остановки процесса счета (при выполнении команды считывания младшего байта таймера счетчика состояние старшего байта запоминается в регистре-защелке для последующего считывания командой чтения старшего байта). Работа устройства контролируется регистрами специальных функций: регистром режима PCA0MD (РСАО Mode
1.8. Таймеры Матричный коммутатор [ Порты ввода/вывода । Рис. 1.38. Блок-схема программируемого массива счетчиков. Register) и регистром управления PCA0CN (РСАО Control Register). С помощью битов выбора импульсов (РСАО Counter/Timer Pulse Select): CPS2 (PCA0MD.3), CPS1 (PCA0MD.2), CPSO (PCA0MD.1) осуществляется выбор источника сип хронизации счетчика/таймера (см. кодовые комбинации на Рис. 1.39). Необхидп мо отметить, что в режиме «внешний тактовый сигнал/8» частота внешнего гене ратора не должна превышать частоту системной синхронизации, а длительность импульса и паузы на внешнем входе ECI должны быть не менее двух периодов системной синхронизации. При переходе счетчика/таймера из состояния FFFFl 1 и состояние 0000Н устанавливается флаг переполнения CF (PCA0CN.7) (Counter Overflow Flag), который при наличии разрешения может вызвать соответствую- щее прерывание. Этот флаг не обнуляется автоматически в аппаратном цикле подтверждения прерывания, а должен обнуляться программно в теле подпро- граммы обработки соогветствующсго прерывания. Пуск таймера осуществляется установкой бига запуска CR (PCA0CN.6) (РСАО Counter/Timer Run Control). Ра бота счетчика/таймера может быть продолжена и в режиме уменьшенного энер- гопотребления 11)1 Г, если yciaiiouien Gin pa ipeuieiiiui работы таймера в этом ре- жиме CIDI (PCA0MD.7) (РСАО Counter/Timer Idle Control) (см. Рис, 1,39).
ina 1, Архитектура микроконтроллеров смешанного сигнала C8051Fxxx К шине SFR Регистр-защелка SYSCLK/12 SYSCLK/4 Переполнение таймера О __________________ECI SYSCLK Внешний тактовый сигнал/8 ООО 101 001 PCA0L 010 011 100 Переполнение —► К системе прерываний CF РСА Рис. 1.39. Блок-схема счетчика/таймера программируемого массива счетчиков. Каждый из модулей захвата/сравнения может быть сконфигурирован для ра- боты в одном из шести режимов (см. выше), причем режим захвата по фронту на иходе СЕХп имеет три модификации: захват по нарастающему фронту, захват по падающему фронту, захват по любому фронту. Режим задается путем установ- ки/сброса битов в регистре режима модуля РСАОСРМп (РСАО Capture/Compare Mode Register). Состояние битов для различных режимов приведено в Табл. 1.5. Таблица 1.5. Установки регистра РСАОСРМп для режимов РСАО PWM16 ECOM CAPP CAPN MAT TOG PWM ECCF Режим X X 1 0 0 0 0 X Захват по нарастающему фронту на входе СЕХп X X 0 1 0 0 0 X Захват по падающему фронту на входе СЕХп X X 1 1 0 0 0 X Захват по любому фронту на входе СЕХп X 1 0 0 1 0 0 X Программный таймер X 1 0 0 1 1 0 X Быстродействующий выход X 1 и 0 X 1 1 X Частотный выход (1 1 II 1) X (I 1 X Я-бигпый ШИМ 1 1 II I) X 1) 1 X 16 GiirHj.nl ШИМ (IUIUIH 111 Hill I I llhl'll НИИ
18. Таймеры Младший бит каждого из регистров PCAOCPMn - ECCFn (Capture/Compare Flag Interrupt Enable) используется как флаг разрешения прерываний модуля. Об- щая функциональная схема прерываний программируемого массива счетчиков РСАО приведена на Рис. 1.40. Из рисунка следует, что прерывание от РСАО может быть вызвано флагом переполнения счетчика/таймера CF (PCA0CN.7), при уста- новленном флаге разрешения ECF (PCA0MD.0), или флагом захвата/сравнения любого из пяти модулей CCFn (п = 0...4) (PCAOCN.n) (Capture/Compare Flag), при установленном соответствующем флаге разрешения ECCFn (PCAOCPMn.0). Процессор реализует указанное прерывание при условии, что бит разрешения прерывания от РСАО — ЕРСАО (EIE1.3) и бит глобального разрешения прерыва- ний ЕА (IE.7) (см. п. 1.6.2 на стр. 48) установлены. Функциональная схема работы модуля РСАО в режиме захвата по фронту сиг- нала на внешнем входе показана на Рис. 1.41. В этом режиме можно запрограмми- ровать функцию захвата с помощью битов разрешения функции захвата САРРп (PCAOCPMn.5) (Capture Positive Function Enable) и CAPNn (PCA0CPMn.4) (Capture Nagative Function Enable): по нарастающему (позитивному) фронту сиг- нала, по падающему (негативному) фронту сигнала или по любому фронту сигна- ла на входе СЕХп (см. также Табл. 1.5). Сигнал захвата вызывает установку соот- ветствующего флага CCFn, а также захватывает и запоминает в регистрах модуля РСАОСРНп (РСАО Capture Module High Byte) и PCAOCPLn (РСАО Capture Module Low Byte) значения из регистров счетчика/таймера РСАОН и PCA0L. Рис. 1.40. Функциональная схема iipcjn.iiiiiiutit нр<>|рлммнрусмо1о массива счетчиков
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx Внешний порта К схеме прерываний РСА Рис. 1.41. Функциональная схема модуля программируемого массива счетчиков в режиме захвата по фронту сигнала на внешнем входе. Функциональная схема работы модуля РСАО в режиме программного таймера показана на Рис. 1.42. В этом режиме значения счета в регистрах РСАОН и PCA0L постоянно сравниваются со значениями в регистрах модуля РСАОСРНп и PCAOCPLn, и в случае их равенства устанавливается флаг запроса прерывания CCFn. Этот режим включается путем установки бита разрешения функции сов- падения МАТп (РСАОСРМп.З) (Match Function Enable). При записи новых значе- ний в регистры РСАОСРНп и PCAOCPLn первым записывается младший регистр PCAOCPLn, а затем старший — РСАОСРНп. Первое из этих событий обнуляет бит разрешения функции компаратора ECOMn (PCAOCPMn.6) (Comparator Function Enable), второе — устанавливает этот бит в состояние 1. Тем самым исключаются сбои, вызываемые возможным некорректным сравнением значений во время операций изменения значений в регистрах. Дополнительное обнуление этого би- га сигналом сброса позволяет запретить работу программного таймера до его пер- вой инициализации. Функциональная схема работы модуля РСАО в режиме быстродействующего выхода показана на Рис. 1.43. Конфигурация модуля при этом полностью соот- ветствует режиму программного таймера, однако в дополнение к этому к выводу СЕХп, назначаемому с помощью матричного коммутатора на одну из линий пор- тов ввода/вывода МК, подключается выход Т-триггера, на вход которого посту- пают импульсы срабатывания 16-битного компаратора. При постоянной частоте синхронизации счетчика/таймера и постоянном значении в регистрах модуля на быстродействующем выходе СЕХп формируется меандр (прямоугольные импуль- сы с ко зффнциентом заполнения 0.5), фазовый сдвиг которого определяется зна-
1.8. Таймеры Запись в PCAOCPLn Рис. 1.42. Функциональная схема модуля программируемого массива счетчиков в режиме программного таймера. Внешний вывод порта Рис. 1.43. Функциональная схема модуля про|раммирусмого массива счетчиков в режиме Си в iponellc niviomero выхода.
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx чением в регистрах модуля. Этот режим включается путем установки дополни- тельно бита разрешения функции переключения TOGn (РСАОСРМп.2) (Toggle Function Enable). Функциональная схема работы модуля РСАО в режиме частотного выхода по- казана на Рис. 1.44. В этом режиме модуль генерирует прямоугольные импульсы (меандр) на соответствующем выходе СЕХп. Старший регистр модуля РСАОСРНп содержит число импульсов синхронизации, необходимое для пере- ключения состояния на выходе СЕХп. Как видно из схемы Рис. 1.44, на это число увеличивается содержимое младшего регистра модуля PCAOCPLn всякий раз, как значение в младшем регистре счетчика/таймера РСАОL достигает значения в ре- гистре PCAOCPLn. В результате этого срабатывает 8-битный компаратор, выход- ной сигнал которого переключает Т-триггер и разрешает запись результата 8-бит- пого сумматора в регистр PCAOCPLn, благодаря чему его значение увеличивается па значение в регистре РСАОСРНп. Частота сигнала FCEXn на входе СЕХп будет при этом равна FcEXn =FPCA/2PCA0CPHn. Примечание. Значение ООН для регистра РСАОСРНп в этом выражении соот- ветствует 256. Частота синхронизации FPCA определяется состоянием управляющих битов CPS2 (PCA0MD.3), CPS1 (PCA0MD.2), CPSO (PCA0MD.1) (см. Рис. 1.39). Работа модуля в описанном режиме разрешается путем установки управляющих битов ЕСОМп (РСАОСРМп.6), TOGn (РСАОСРМп.2) и дополнительно бита PWMn (РСАОСРМп.1) (Pulse Width Modulation Mode Enable). Запись в PCAOCPLn Рис. 1.44. Функциональная схема модуля программируемо! о массива счетчиков в режиме частотного выхода
18. Таймеры Функциональная схема работы модуля РСАО в режиме 8-битного ШИМ по- казана на Рис. 1.45. В этом режиме частота следования прямоугольных импульсов на выходе СЕХп равна FCEXri = FPCA/256. Всякий раз в момент равенства содержи- мого младшего регистра счетчика/таймера PCA0L содержимому младшего регис- тра модуля PCAOCPLn выходной RS-триггер устанавливается в состояние I, а в момент переполнения младшего регистра счетчика/таймера PCA0L он сбрасыва- ется. В этот же момент происходит перезапись содержимого старшего регистра модуля РСАОСРНп в младший PCAOCPLn, чем обеспечивается бессбойное изме- нение коэффициента заполнения DC (Duty Cycle) выходных импульсов в любой произвольный момент времени. Этот коэффициент определяется выражением DC = (256 - РСАОСРНп) / 256. Запись Рис. 1.45. Функциональная схема модуля программируемого массива счетчиков в режиме 8-битного ШИМ. Работа модуля в описанном режиме разрешается путем установки управляю щнх битов ЕСОМп (РСАОСРМп.6) и PWMn (PCAOCPMn.l). Из приведенною выше выражения видно, что максимальный коэффициент заполнения DC равен 100% (РСАОСРНп = ООН), а минимальный равен 0.39% (РСАОСРНп = FFH). Зиа ченнс DC = 0% можно достигнуть, сбросив бит ЕСОМп. Функциональная схема работы модуля РСАО в режиме 16-битного ШИМ по- ка 1ана на Рис. 1.46. Для введения этого режима надо дополнительно установить в состояние 1 бит PWM16n (РСАОСРМп.7) (16-bit Pulse Width Modulation Enable). Принцип формирования ШИМ сигнала в этом режиме аналогичен режиму 8- (>игиого ШИМ, одп 1ко Счс1 времени осуществляется полным счетчиком/тайме- ром в составе регпегрон РС’ЛОН и РСА01 , а 16-битпый компаратор сравнивает его
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx содержимое со значением в паре регистров модуля РСАОСРНп и PCAOCPLn. 11оскольку в этом режиме нет защитного буферного регистра при необходимости изменить коэффициент заполнения, момент записи нового значения в эти регис- тры должен быть синхронизирован с использованием прерываний от модуля. При этом сначала следует загрузить младший регистр, а затем — старший. На вре- мя выполнения команд загрузки функция компаратора будет запрещена, что поз- воляет избежать формирования сбойных циклов ШИМ-сигнала. Коэффициент заполнения в этом режиме определяется выражением DC = (65536 - РСА0СРп)/65536. Рис. 1.46. Функциональная схема модуля программируемого массива счетчиков в режиме 16-битного ШИМ. Из приведенного выражения следует, что максимальный коэффициент запол- нения DC равен 100% (PCAOCPn = 0000Н), а минимальный равен 0.0015% (PCAOCPn = FFFFH). Значение DC = 0% можно достигнуть, сбросивбит ЕСОМп. Режим каждого из пяти модулей программируемого массива счетчиков РСАО выбирается независимо с помощью управляющих регистров PCAOCPMn (п — но- мер модуля: 0...4). 1.9. Контроллеры последовательной связи Контроллеры последовательной связи представлены в МК C8051F020 тремя типами: SMBus (System Management Bus), SPI (Serial Peripheral Interface) и UART (Universal Asynchronous Rcceiver/Transmitter). 1.9.1. Контроллер SMBus SMBus — это универсальный двухпроводной двунаправленный последователь- ный интерфейс, совместимый с последовательной шиной I2C (Inter Integrated Circuit). Передача и прием информации ориентированы на байтовый формат. Кон-
1.9. Контроллеры последовательной связи Внешние выводы порта Рис. 1.47. Функциональная схема koi и роллера последовательного ннтерф иса SMBusO
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx гроллер SMBusO, входящий в состав МК, может работать как ведущий (Master) или ведомый (Slave), а также работать на шине с несколькими ведущими устройствами. Контроллер SMBusO имеет две сигнальные линии: последовательных данных SDA (Serial Data) и последовательного тактового сигнала SCL (Serial Clock). Функциональная схема контроллера SMBusO приведена на Рис. 1.47. Цент- ральным узлом контроллера является сдвигающий регистр данных SMB0DAT (SMBusO Data Register), имеющий функции параллельной записи и считывания. 11оследовательный вход данных этого регистра через фильтр подключен к линии SDA, назначаемой с помощью матричного коммутатора на один из выводов портов МК, что позволяет осуществлять прием данных. Последовательный выход данных того же регистра через управляющий мультиплексор, инвертор и электронный ключ также подсоединяется к линии SDA, что позволяет реализовать передачу дан- ных. Вторым узлом устройства является логика управления SMBus. Этот узел пре- жде всего отвечает за формирование (режим ведущий) или прием (режим ведомый) импульсов синхронизации. Эта функция поддерживается подключением входа уз- ла через фильтр и выхода через инвертор и электронный ключ к линии SCL, назна- чаемой с помощью матричного коммутатора на один из выводов портов МК. Этот же узел поддерживает соответствующие протоколы в различных режимах и в ситу- ациях, требующих вмешательства процессора, формирует запрос прерывания SM Bus IRQ. Кроме этого схема контроллера включает компараторы адреса ведомо- го и делитель частоты синхронизации МК SYSCLK, для управления скоростью пе- редачи/приема. Последняя задается значением, содержащимся в регистре частоты синхронизации SMBOCR (SMBusO Clock Rate Register): CR = SYSCLK 12(256 - SMBOCR). Регистр адреса ведомого SMBOADR (SMBusO Address Register) позволяет за- дать 7-битный адрес ведомого SLV6...SLV0 (SMB0ADR.7...SMBOADR. 1) (SMBusO Slave Address) и дать разрешение на прием общих вызовов с адресом 0000000b пу- тем установки в 1 бита разрешения GC (SMBOADR.O) (General Call Address Enable). Управление контроллером SMBusO осуществляется с помощью битов управ- ления и флагов, размещенных в регистре управления SMBOCN (SMBusO Control Register). Всякий раз, как устанавливается флаг прерывания от SMBusO - SI (SMBOCN.3) (SMBus Serial Interrupt Flag), регистр состояния контроллера SMBOSTA (SMBusO Status Register) получает код состояния контроллера. Этот код идентифицирует одно из 28 состояний контроллера и действителен, пока флаг SI находится в состоянии логической единицы. Поэтому программный сброс этого флага должен выполняться после процедуры ветвления программы к подпро- грамме обработки состояния. Для облегчения процедуры ветвления код состоя- ния сдвинут в регистре влево, так что младшие три бита всегда равны нулю. Это позволяет использовать код состояния непосредственно как индекс ветвления к нужной 8-байтовой секции программного кода обработки прерывания. Такое ветвление можно реализовать с помощью команды JMP @A+DPTR. Коды состо- яний контроллера SMBus в разных режимах приведены в Табл. 1.6.
1.9. Контроллеры последовательной связи Таблица 1.6. Коды состояний SMBus (регистр SMB0STA) Режим Код состояния Состояние SMBus Типовые действия Ведущий: псред./прием 08 Н Состояние START передано Загрузить в регистр SMB0DAT адрес ведомою + R/W. Сбросить STA ЮН Состояние START передано повторно Загрузить в регистр SMB0DAT адрес ведомого + R/W. Сбросить STA Ведущий: передача I8H Адрес ведомого + W переданы. АСК принят Загрузить в регистр SMB0DAT байт да н п ых для передач и 20Н Адрес ведомого + W переданы. NACK принят Повторить запрос подтверждения. Установить биты STO и STA 28 Н Бай) данных передан. АСК принят Загрузить в регистр SMB0DAT следующий байт ИЛИ утаповитьбит STO ИЛИ сбросить бит STO, затем установить биг STA для повторения START ЗОН Байт данных передан. NACK принят Передать повторно ИЛИ установить бит SТ() 38Н Потеря управления Сохранить текущие данные Ведущий: прием 40Н Адрес ведомого + R переданы. АСК принят Если принимается только один байт, то очистить АА (послать NACK после приема байта). Ожидать приема данных 48 Н Адрес ведомого + R переданы. NACK принят Повторить запрос подтверждения. Установить биты STO и STA 50Н 58Н Байт данных принят. АСК передан Читать регистр SMB0DAT. Ждать следующий байт. Если следующий бай) последний, очистить АА Байт данных принят. NACK передан Установить бит SТО Ведомый: прием 60Н Принят собствс н н ы й адрес вело мого + W. АС К передан Ожидать данные 68Н Потеря управления при передаче адреса ведомого + R/W как ведущий. Принят собственный адрес ведомого + W. АСК передан Сохранить текущие данные для повторения попытки передачи после освобождения шипы. Ожидать данные 70Н Принят адрес общего вызова + W. АСК передан Ожидать данные 78Н 11отеря управления при передаче адреса ведомого + R/W как ведущий. Принят адрес общего вызова. АСК передан Сохранить текущие данные для повторения попытки передачи после освобождения шипы 80Н Байт данных принят. АСК передан Читать регистр SMB0DAT. Ждать следующий байт ИЛИ STOP шт Байт данных принят. NACK передан Установить бит STO для сброса SMBus 90Н Байт дан пых принят после общего вызова. АСК передан Читать регистр SMB0DAT. Ждать следующий байт ИЛИ STOP 98Н Байт данных принят после общего вызова. NACK передан Установить бит STO для сброса SM Bus АО II STOP или повторный START принят Нет необходимости в действиях Ведомый: передача । А8Н Принят собственный адрес ведомого + R. АСК передан Загрузить в регистр SMB0DAT байт данных для передачи ВОН Потеря управления при передаче адреса ведомого + R/W как ведущий. Принят собственный адрес ведомого + R. АСК передан Сохранить текущие данные для повторения попытки передачи после освобождения шины. Загрузить в рсгиор SMB0DAT байт данных для передачи В8Н Байт данных передан. АСК принят Загрузить в регистр SM ВО DAT байт данных для передачи < 'ОН Байт данных передан. NACK принят Ждать STOP C8II Последний байт данных нсрслап (АЛ* 0) АСК принят Установить бит STO для сброса SMBus 1 мьгй D0II Переполнение таймера высокою уровня сипыла SCL Ус) anoint гь би г STO для сброса S М Bus & оогг Ошибка шины uicKoppcKiiiL-iii S1 ЛК 1 mill S ЮГ) Vci.uioiiiiiboiii S ТО для спроса SMBus шт Режим ID! F Состояние нс ус) iii.iujiiiu.ici <|>лш SI
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx Типичная конфигурация шины SMBus показана на Рис. 1.48,а. К шине мож- но подсоединять устройства с напряжением питания 3...5 В. Двунаправленные линии SDA и SCL должны быть соединены с источником питания напряжением 5 В через резисторы для реализации монтажного ИЛИ. Это позволяет подклю- чать к линиям устройства, имеющие выход с открытым стоком или коллектором. Номинал резисторов и количество устройств, подключаемых к линиям, опреде- ляются только требованиями к длительностям нарастающего и падающего фрон- та импульса, которые не должны превышать 300 и 1000 нс соответственно. START Адрес ведомого + R/W АСК Байт данных NACK STOP б) Рис. 1.48. Конфигурация (а) и протокол передачи (б) интерфейса SMBus. Любое из устройств, подключенных к шине SMBus, может претендовать на роль ведущего, послав в шину сигнал START. Специальная арбитражная схема контроллера обеспечивает процесс выбора ведущего среди нескольких контрол .'Крон, пославших сигнал START. Таким образом, в каждом цикле обмена инфор манией по шине присутствует только одно ведущее устройство. Именно этому ус- । ройству принадлежит право выбрать адресуемое ведомое устройство и направле-
1.9. Контроллеры последовательной связи ние передачи данных: от ведущего к ведомому — ЗАПИСЬ (WRITE) или or ведомого к ведущему — ЧТЕНИЕ (READ). Временные диаграммы протокола передачи данных показаны на Рис. 1.4Н,б. Типовой цикл передачи (транзакция) содержит посылку бита START, адресного байта (7-битный код адреса ведомого SLA6...SLA0 и бит направления R/W), перс дачу/прием одного или более байтов данных и передачу бита STOP. Каждый байт, принятый ведущим или ведомым устройством, должен быть подтвержден посыл- кой бита АСК (acknowledge — подтверждать) в виде сигнала низкого уровня па ли- нии SDA во время импульса положительной полярности на линии SCL. Если принимающее устройство не подтверждает прием байта (т. е. уровень сигнала па линии SDA остается высоким), передающее ус гройство воспринимает это как би i NACK (not acknowledge). Состояние 1 бита направления R/W соответствует при ему, состояние 0 - передаче. Все транзакции инициируются ведущим устройством, оно посылает старто вый бит, затем адрес ведомого с битом направления. Если направление передачи — ЗАПИСЬ, то ведущий посылает очередной байт, всякий раз дождав- шись подтверждения от ведомого. Если направление передачи — ЧТЕНИЕ, то ве- дущий ожидает очередной байт от ведомого, подтверждая прием очередного баи га битом подтверждения. По завершении транзакций ведущий генерирует стоп бит и освобождает шину. Арбитраж шины SMBus выполняется следующим образом. Ведущее устройс- тве вправе начать передачу, только если шина свободна. Шина считается свобод- ной только после выполнения условий состояния STOP, а именно если липни SCL и SDA остаются в состоянии высокого потенциала в течение определенного времени. Для рассматриваемых контроллеров это время составляет 50 мкс. Если дна и более устройств одновременно попытаются начать передачу, то в работу вступает специальная арбитражная схема. Принцип ее работы достаточно прост: начав передачу путем посылки состояния START (низкий уровень), каждое веду тсс устройство делает попытку освобождения шины, и, если на линии есть дру I не ведущие, линия SDA остается в состоянии низкого уровня и ведущее устройс ню прекращает попытки захвата линии до следующего момента освобождения динии. В результате на линии остается одно ведущее устройство, которое и рсали >ует требуемую транзакцию. Шина SMBus поддерживает механизм синхронизации, позволяющий под- ключать к одной шине устройства с различным быстродействием. Для этого ис пользуется расширение фазы низкого уровня сигнала SCL. Ведомое устройство может просто удерживать линию SCL в состоянии низкого уровня, не давая воз- можности ведущему передать очередной синхроимпульс, тем самым понижая Чис юту синхронизации. Если ведомое устройство продолжает удерживать линию S< I в состоянии длительного времени, то дальнейшая связь становится невоз- можной. Для решения этой проблемы любое устройство, подключенное к шипе, должно идентифицировать превышение 25-мс длительности фазы низкого уров- ня импульса синхронизации как ошибку времени. Любое из устройств, обнару- жившее ошибку времени, должно выполнить реппицналнзацню не позднее К) мс после ее обнаружения.
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx Каждый контроллер SMBusO может быть сконфигурирован как ведущее или ведомое устройство. Следовательно, в каждый момент времени контроллер мо- жет работать в одном из четырех режимов: режим передачи ведущего устройства, режим приема ведущего устройства, режим передачи ведомого устройства, режим приема ведомого устройства. Последовательные форматы передачи/приема дан- ных по шине SMBus в этих режимах приведены на Рис. 1.49. На рисунке указаны моменты установки флага запроса прерывания SI. Эти прерывания могут обраба- тываться МК как аппаратные векторные прерывания или программно в режиме поллинга (опроса состояния флага). В любом случае идентификация состояния контроллера выполняется с помощью кода состояния в регистре SMB0STA (см. Табл. 1.6). В режиме передачи ведущего устройства (см. Рис. 1.49,а) контроллер передает стартовый импульс S, затем байт, содержащий адрес ведомого (или адрес общего вызова 0000000b), и бит направления, равный 0, что соответствует операции ЗА- ПИСЬ (W — WRITE). Получив подтверждение приема адреса от ведомого А (АСК), ведущий посылает байты данных, каждый раз дожидаясь подтверждения А. Для указания конца транзакции ведущий посылает состояние «стоп» Р. В режиме приема ведущего устройства (см. Рис. 1.49,6) контроллер передает стартовый импульс S, затем байт, содержащий адрес ведомого, и бит направле- ния, равный 1, что соответствует операции ЧТЕНИЕ (R — READ). Получив под- тверждение приема адреса от ведомого А (АСК), ведущий ожидает и принимает байты данных, каждый раз отвечая посылкой подтверждения А. После получения последнего байта ведущий отвечает сигналом неподтверждения N (NACK), что является указанием ведомому прекратить передачу. Транзакция завершается пу- тем посылки ведущим состояния «стоп» Р. В режиме передачи ведомого устройства (см. Рис. 1.49,в) контроллер прини- мает от ведущего стартовый импульс S, затем байт, содержащий адрес ведомого, и бит направления, равный 1, что соответствует операции ЧТЕНИЕ (R — READ). Если адрес ведомого совпадает с собственным адресом в регистре SMB0ADR, контроллер посылает ведущему подтверждение А (АСК), а затем байты данных, каждый раз дожидаясь от ведущего подтверждения А. Для указания конца тран- закции ведущий посылает состояние неподтверждения N (NACK) и состояние «стоп» Р. В режиме приема ведомого устройства (см. Рис. 1.49,г) контроллер принимает от ведущего стартовый импульс S, затем байт, содержащий адрес ведомого (или адрес общего вызова 0000000b), и бит направления, равный 0, что соответствует операции ЗАПИСЬ (W — WRITE). Если адрес ведомого совпадает с собственным адресом в регистре SMB0ADR или с адресом общего вызова (при установленном бите разрешения общего вызова GC в регистре SMB0ADR), контроллер посылает ведущему подтверждение А (АСК). Далее он принимает байты данных, каждый раз посылая подтверждение А. Транзакция заканчивается после получения от ве- дущего состояния «стоп» Р. Контроль длительности фазы низкого уровня импульса синхронизации SCL па типе осуществляется с помощью таймера 3, если установлен бит ТОЕ (SMBOCN.O) (SMBus Timeout Enable Bit) и работа таймера 3 разрешена (см.
1.9. Контроллеры последовательной связи а) Адрес ведомого Байт данных Байт данных Прерывание Прерывание Прерывание Прерывание б) в) S R А N р Прерывание Адрес ведомого Байт данных Байт данных W А А А Р Прерывание Прерывание Прерывание г) Условные обозначения Принято через интерфейс SMBus Передано через интерфейс SMBus S — Старт Р — Стоп А — Подтверждение R — Чтение W — Запись N — Нет подтверждения Рис. 1.49. Последовательные форматы псрсдачи/приема данных SMBus; а) формат передачи ведущего устройства; 6) формат приема ведущего устройства; в) формат передачи ведомого устройства; г) формат приема ведомого устройства.
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx и. 1.8.1.3 на стр. 62). В этом случае фаза высокого уровня синхроимпульса SCL приводит к перезагрузке таймера, а фаза низкого уровня разрешает счет времени. Если таймер сконфигурирован на длительность отсчета до переполнения 25 мс, установка флага запроса прерывания от таймера 3 будет свидетельствовать об ошибке времени на шине. В этом случае программа обработки прерывания от таймера 3 должна обеспечивать реинициализацию контроллера SMBus. 1.9.2. Контроллер SPI Контроллер SPI0 обеспечивает трехпроводной последовательный интерфейс, работающий в режиме дуплекса. Он может работать как ведущее или ведомое уст- ройство и допускает построение последовательной шины с несколькими ведомы- ми и ведущими устройствами. Контроллер обеспечивает распознавание конф- ликтной ситуации, когда несколько ведущих устройств пытаются одновременно захватить шину. Если контроллер SPI0 сконфигурирован как ведущее устройство, то максимально допустимая скорость передачи (бит/сек) составляет I/2 частоты системной синхронизации SYSCLK. Если же он сконфигурирован как ведомое устройство, то максимально допустимая скорость передачи (бит/сек) для режима дуплекса составляет I/10 частоты системной синхронизации SYSCLK, при усло- вии, что ведущее устройство формирует свои сигналы синхронно с импульсами SYSCLK. В противном случае скорость передачи должна быть еще ниже. В осо- бом случае, когда ведущее устройство только передает свои данные и не прини- мает данные от ведомого устройства (режим полудуплекса), для ведомого допус- тима скорость передачи до 1/4 частоты SYSCLK, при условии, что ведущее уст- ройство генерирует свои сигналы синхронно с импульсами SYSCLK. Функциональная схема контроллера последовательного интерфейса SPI0 приведена на Рис. 1.50. Контроллер имеет4 внешних вывода, назначаемые нали- пни портов ввода/вывода МКс помощью матричного коммутатора: MOSI (Master Out, Slave In) — выход ведущего, вход ведомого — используется для передачи данных от ведущего к ведомому. Когда контроллер сконфигуриро- ван как ведущий, это — выход, когда сконфигурирован как ведомый, это — вход. Первыми передаются старшие разряды байта данных; MISO (Master In, Slave Out) — вход ведущего, выход ведомого — используется для передачи данных от ведомого к ведущему. Когда контроллер сконфигуриро- ван как ведущий, это — вход, когда сконфигурирован как ведомый, это — выход. Первыми передаются старшие разряды байта данных. Ведомое устройство пере- водит этот выход в третье высокоимпедансное состояние, если данное ведомое устройство не выбрано; SCK (Serial Clock) — тактовый сигнал последовательной передачи по линиям MOSI и MISO, это выход для ведущего устройства и вход для ведомого. Этот сиг- нал всегда генерируется только ведущим устройством; NSS (Slave Select) — входной сигнал выбора ведомого или запрещения работы ведущего. При работе контроллера в режиме ведущего для генерирования выход- ных сигналов выбора ведомого следует использовать выводы портов ввода/выво- да общею назначения МК (GPIO — General Purpose Inpiit/Output). Этот сигнал
1.9. Контроллеры последовательной связи должен иметь низкий уровень для инициирования обмена данными между веду шим и ведомым. Если уровень сигнала становится высоким, то контроллер SI’I выходит из режима ведомого. Следует отметить, что принятые данные не сохра няются в регистре ведомого, если уровень сигнала NSS высокий. При многобап товой транзакции после передачи/приема очередного байта этот сигнал должен возвращаться и удерживаться на высоком уровне по меньшей мере в течение че- тырех периодов системной синхронизации. Типовая схема системы с интерфейсом SPI приведена на Рис. 1.51. Линия MISO шины SPI должна иметь «оттягивающий» резистор на линию питания VDD для образования схемы монтажного ИЛИ. Шина регистров SFR SYSCLK Регистр принятых данных Рис 1.50. <I>viikiiiioii.ihi.ii.ih схема контроллера последовательного шнерфейса SHIH
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx Рис. 1.51. Типовая схема системы с интерфейсом SPI. Основным регистром контроллера SPI0 (см. Рис. 1.50) является регистр дан- ных SPIODAT (SPIO Data Register), включающий в себя регистр сдвига и регистр- защелку для принятых данных, допускающих запись передаваемого байга и счи- тывание принимаемого байта. Вход принимаемых последовательных данных (Rx Data) и выход передаваемых последовательных данных (Тх Data) через логику уп- равления выводами может соединяться в соответствии с режимом работы с лини- ями интерфейса MOSI и MISO. Блок логики управления SPI обеспечивает управ- ление сдвигом данных в регистре SPIODAT, генерирование импульсов синхрони- зации SPI (только в режиме ведущего устройства) и управление выводами интерфейса. Синхронизация работы логики управления осуществляется от сис- темного тактового сигнала SYSCLK через делитель частоты, управляемый содер- жимым регистра частоты синхронизации SPIOCKR (SPIO Clock Rate Register) Частоту синхронизации шины можно рассчитать по формуле fSCK = SYSCLK /(2-( SPIOCKR + 1)). Регистр конфигурации SPIOCFG (SPIO Configuration Register) позволяет на- страивать интерфейс на работу с устройствами, имеющими различный формат данных (от 1 до 8 бит), различную фазу и полярность импульсов синхронизации. Управление и контроль за работой интерфейса осуществляются с помощью уп- равляющих бит и флагов, размещенных в регистре управления SPIOCN (SPIO Control Register). Передача данных может инициироваться только ведущим устройством. Пере- вод контроллера в режим ведущего устройства выполняется путем установки в 1 флага разрешения режима ведущего MSTEN (SPIOCN.1) (Master Мосе Enable). Передача данных в этом режиме начинается сразу после записи передаваемых данных в регистр данных SPIODAT. Ведущее устройство немедленно начинает сдвиг регистра и выдачу последовательных данных на линию MOSI в сопривож дснин тактовых импульсов налипни SCK. При этом последовательные данные со
•7.9. Контроллеры последовательной связи входа MISO размещаются в регистре сдвига SPI0DAT. По окончании цикла перс дачи устанавливается флаг запроса прерывания SPIF (SPI0CN.7) (SPIO Interrupl Flag). Если прерывания от SPI0 разрешены, это вызывает переход программы к подпрограмме обработки прерывания, функцией которой является считывание из регистра SPI0DAT принятой информации и запись в него новой информации для передачи. С целью сопряжения с различными типами ведомых устройств контроллер SPI0 имеет возможность запрограммировать формат передачи от 1 до 8 бит. Это осуществляется записью 3-битного кода SPIRFS2...SPIRFS0 (SPI0CFG.|2:0|) в регистр конфигурации (код ООО соответствует формату 1 бит, а код 111 — 8 бит). Принцип дуплексной связи между ведущим и выбранным ведо- мым устройством поясняется функциональной схемой Рис. 1.52,а. ВЕДУЩЕЕ УСТРОЙСТВО ВЕДОМОЕ УСТРОЙСТВО а) б) Рис. 1.52. Р.икна последовательного интерфейса SPI: а) функциональна»! схема и режиме дуплекса; б) временные ди.праммы.
Iлава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx Если контроллер SPIO разрешен, но не сконфигурирован как ведущее уст- |)<)и тво, он функционирует как ведомое устройство. При этом другой контрол- лер. функционирующий как ведущее устройство, посылает активный низкий уровень логического сигнала на вход NSS, выбранного для связи ведомого уст- ройства. Флаг запроса прерывания SPIF ведомого устройства устанавливается в юг момент, когда сигнал NSS возвращается на высокий логический уровень по окончании цикла передачи/приема данных. При этом в регистре-защелке SPIODAT ведомого устройства записан принятый байт, а в сдвигающий регистр можно загрузить передаваемый байт для следующего цикла передачи. Это должно oi.iib сделано не менее чем за один период сигнала синхронизации SPI до того, как ведущий начнет следующий цикл передачи. Кроме того, сигнал выбора ведо- мо) о NSS должен находиться на активном низком уровне не менее двух периодов i ни темного тактового сигнала SYSCLK, прежде чем ведущий контроллер сфор- мирует активный фронт сигнала синхронизации SCK. Регистр данных SPIODAT имеет буферный регистр-защелку только на выходе считывания (см. Рис. 1.50) и никак не буферирован со входа записи. Попытка за- писи в этот регистр во время цикла передачи/приема приведет к установке флага конфликта записи WCOL (SPIOCN.6) (Write Collision Flag), и запись будет проиг- норирована, а цикл передачи/приема продолжен до завершения. Если ведомое V) гройство обнаруживает нарастающий фронт сигнала NSS дотого, как выполне- на операция считывания предыдущего данного из регистра-защелки SPIODAT, то ус ia на вливается флаг попытки перезаписи RXOVRN (SPI0CN.4) (Receive Overrun I lay.) и перезапись содержимого сдвигающего регистра в буферный регистр-за- щелку блокируется. При этом старые данные сохраняются и доступны для считы- вания, а новые — теряются. Контроллер допускает присоединение нескольких устройств к шине SPI, од- 1Ы1-,о используюших ее с разделением времени. Флаг ошибки режима MODF (SPIOCN.5) (Mode Fault Flag) устанавливается, если в устройстве, сконфигуриро- ванном как ведущее, обнаруживается низкий уровень на входе NSS. В случае ус- тиовки этого флага бит разрешения режима ведущего MSTEN (SPIOCN. 1) и бит ра (решения контроллера SPIEN (SPI0CN.0) (SPI Enable) сбрасываются аппарат- но, переводя контроллер в выключенное состояние. В случае наличия нескольких нслущих устройств на шине SPI, прежде чем установить бит разрешения режима вслушего MSTEN (SPIOCN. 1), МК должен проверить, что флаг SLVSEL (SPIOCN.2) (Slave Selected Flag) находится в нулевом состоянии. Это свидетельс- । пусто гом, что на входе NSS установлен высокий уровень и шина свободна. Временные диаграммы работы последовательного интерфейса SPI в режиме луп )скса приведены на Рис. 1.52,6. Из рисунка видно, что в качестве импульсов синхронизации SCK можно выбрать один из четырех вариантов, отличающихся фаюй и полярностью. Этот выбор производится соответствующей установкой тух бигов: бита фазы тактового сигнала СКРНА (SPI0CFG.7) (SPIO Clock Phase) и бита полярности тактового сигнала CKPOL (SPI0CFG.6) (SPIO Clock Polarity). Выбор фазы и полярности тактового сигнала позволяет адаптироваться к различ- ным компонентам, присоединяемым к МК с помощью интерфейса SPI. И веду- щее, п ведомое устройства должны быть скопфигуриров шы идентичным обра-
1.9. Контроллеры последовательной cbi зом. Следует отметить, что во избежание сбоев и потери данных на время конф гурации контроллера бит разрешения SPIEN (SPI0CN.0) должен быть сброше Из временных диаграмм видно, что транзакция сопровождается низким актн ним уровнем сигнала выбора ведомого NSS на входе ведомого устройства и пр изводится старшими битами вперед полициям MISO/MOSI. 1.9.3. Контроллер U ART МК C8051F020 содержит два контроллера последовательного интерфей UART: UARTO и UART1. Эти контроллеры имеют идентичную конфигурашп одинаковый набор регистров, битов управления и флагов. Поэтому ниже iipiiu дено подробное описание для контроллера UARTO. Заменив в наименовании р гистров, битов управления и флагов индекс 0 на индекс I, можно получить плеч тификаторы для контроллера UART1. Дополнительным отличием является ш пользование для синхронизации UART1 таймера 4 взамен таймера 2 в UARTO. UARTO представляет собой улучшенный последовательный порт с обнаруЖ) нием ошибки фрейма (формата) и аппаратным распознаванием адреса ведомо! UARTO способен работать в асинхронном режиме дуплекса и синхронном рсж1 ме полудуплекса. Поддерживается также мультипроцессорная связь. Принять данные по завершении приема запоминаются в буферном регистре, что позволен контроллеру продолжить прием последовательных данных, не дожидаясь чтеш принятых данных МК. Специальный бит перезаписи (Receive Overrun Bit) врез назначен для индикации той ситуации, когда вновь поступившие данные запиш ны в буферный регистр «поверх» данных, не прочитанных перед этим процессе ром. Функциональная схема контроллера последовательного интерфейса UAR I показана на Рис. 1.53. Контроллер состоит из передатчика (верхняя часть схемь и приемника (нижняя часть схемы). Линии последовательной передачи ТХО последовательного приема данных RX0 назначаются на линии портов ввода/вь вода МКс помощью матричного коммутатора. Основным узлом передатчика является 8-битный сдвигатель (сдвигающий pi гистр) передатчика, дополняемый еще одним D-триггером со стороны старшег бита для работы в 9-битовом режиме. Для фиксации факта завершения передач (передатчик пуст) служит логическая схема детектора 0. Передатчик управляе те блоком управления, синхронизируемым тактовыми импульсами передатчик! 1 Clock и вырабатывающим импульсы управления сдвигом Shift, импульс генери ции стоп-бита Stop Bit Generation, сигналы разрешения данных Data и поеылк стартового импульса Send. Запуск процесса передачи осуществляется импульсо! Start одновременно с записью информации в регистр данных контроллера. Но за вершении цикла передачи блок управления вырабатывает запрос прерывания нс редатчикаТх IRQ. Основным узлом приемника является 9 битный приемный регистр сдвига дополненный детектором ошибки френча. 11рием ни к управляется блоком управ лспия, синхронизируемым тактовыми импульсами приемника Rx Clock и выра батывающим импульсы управления i пипом Shill и импульс загрузки данных
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx Шина регистров SFR Запись SBUF0 ТВ80 SET D Q | SBUFO —► (СдвигательПРД) _______ Детектор О ТХО Г Матричным I ' *1 коммутатор । Stop Bit Gen. Shift Data J От схемы синхронизации UART Start Tx Clock Rx Clock Блок управления передатчиком R SCONO R TxIRQ Send T TIO R 1,2'N 8 800 U »|U H I П I I П IMlM'MlE В В. I ( 0 1,2'!'.' 2 S 0 0l0|0 0 01 I Запрос прерывания UARTO EN Rx IRQ Блок управления Load SBUF приемником Address Внешние выводы порта Puc. 1.53. Функциональная схема контроллера nocacaoiutiejii.iiuio интерфейса UARTO.
1.9. Контроллеры последовательной связи буферный регистр приемника Load SBUF по окончании процесса приема. Запуск процесса приема в асинхронном режиме осуществляется передним падающим фронтом стартового импульса, который поступает на вход Start блока управления приемником. По завершении цикла приема блок управления вырабатывает за- прос прерывания приемника Rx IRQ. Два дополнительных управляющих регист- ра приемника: регистр адреса SADDRO (UARTO Serial Address) и регистр разреше- ния адреса SADENO (UARTO Serial Address Enable) предназначены для идентифи- кации контроллера в режиме мультипроцессорной связи. Если принятый контроллером адрес соответствует ограничениям регистра разрешения, то компа- ратор приемника посылает в блок управления сигнал соответствия адреса Address Match, разрешая тем самым прием дальнейшей информации. Доступ к контроллеру со стороны процессора осуществляется через регистры специальных функций, в частности через регистр управления последовательным интерфейсом SCONO (UARTO Control Register) и регистр буфера данных последо- вательного интерфейса SBUFO (UARTO Data Buffer Register). Следует отметить, что один и тот же адрес регистра SBUFO (99Н) обеспечивает доступ как к прием ному, так и к передающему регистру: операция чтения соответствует обращению к приемному регистру, операция записи — обращению к передающему регистру. Обслуживание контроллера со стороны МК может осуществляться как в ре жиме опроса (поллинга), так и в режиме прерываний. Для этой цели он снабжен двумя флагами: флагом прерывания передатчика TIO (SCONO.I) (Transmit Interrupt Flag), устанавливаемым по завершении передачи (т. е. показывает, что передатчик пуст и можно загрузить очередной байт для передачи), и флагом пре- рывания приемника RIO (SCONO.O) (Receive Interrupt Flag), устанавливаемым по завершении приема (т. е. показывает, что приемник содержит принятый байт, ко- торый следует немедленно прочитать во избежание перезаписи). Если прерыва- ние от UARTO разрешено, то установка любого из этих флагов вызывает аппарат- ное ветвление процессора к подпрограмме обработки прерывания от UARTO. При этом флаги аппаратно не сбрасываются, что позволяет подпрограмме обра- ботки прерывания определить источник прерывания (приемник или передатчик или оба одновременно) и выполнить соответствующие операции обслуживания, в том числе программный сброс указанных флагов. UARTO может работать в одном из четырех режимов: • Режим 0: 8-битный синхронный режим, фиксированная скорость; • Режим 1: 8-битный асинхронный режим, переменная скорость; • Режим 2: 9-битный асинхронный режим, фиксированная скорость; • Режим 3: 9-битный асинхронный режим, переменная скорость. В режиме 0 контроллер обеспечивает синхронную полудуплексную связь. Схема использования контроллера UARTO в этом режиме показана на Рис. 1.54,а. Линия RX0 используется для передачи/приемаданных DATA, а линия ТХО —для импульсов синхронизации СЕК. Попятно, что, поскольку МК формирует им- пульсы синхронизации, он является ведущим устройством. Передача данных на пинается в момент записи данных в регисгр данных контроллера SBUFO. 8-бш ныеданные посылаются па линию RXO младшими битами вперед в сонровождс
Глава 1. Архитектура микроконтроллеров смешанного сигнала С8051Fxxx 8 внешних выводов RXO (data - выход) ТХО (elk - выход) RXO (data - вход) ТХО (elk - выход) РЕЖИМ 0: ПЕРЕДАЧА DO )( D1 D2 X D3 X D4 D5 D6 D7 / РЕЖИМ 0: ПРИЕМ б) Рис. 1.54. Работа последовательного интерфейса UARTO в режиме 0: а) функциональная схема в режиме синхронного полудуплекса; б) временные диаграммы. ппи тактовых импульсов по линии ТХО. Временные диаграммы режима передачи показаны на Рис. 1.54,6. После окончания периода 8-го тактового импульса уста- навливается флаг прерывания передатчика Т10 (SCON0.1). Прием данных начинается немедленно после установки бита разрешения приема RENO (SCONO.4) (Receive Enable) и сброса флага прерывания приемника «10. Через один период синхронизации после 8-го импульса сдвига флаг преры- пиппя приемника R10 вновь устанавливается и прием приостанавливается до мо- мента сброса этого бита подпрограммой обслуживания прерывания. В случае не- Мглиснной реакции МК процесс приема может продолжаться непрерывно. Вре- mi иные диаграммы режима приема также показаны на Рис. 1.54,6. Скорость передачи в режиме 0 зафиксирована на уровне SYSCLK/12. Hmiii/выход данных RX0 сконфигурирован по схеме с открытым стоком, поэтому ни ишия нуждается во внешнем резисторе, подключенном к источнику питания. II режимах 1, 2 и 3 контроллер обеспечивает стандартную дуплексную асинх- ронную связь. Варианты схемы соединения устройств приведены на Рис. 1.55,а. II режиме 1 каждая посылка содержит 10 бит (Рис. 1.55,6): 1 старт-бит (START HI I), 8 бит данных D0...D7 (младшими битами вперед) и 1 стоп-бит (STOP BIT). < mpi бит передается низким уровнем сигнала (SPACE), а стоп-бит — высоким уровнем сигнала (MARK). Данные передаются па выход ТХО и принимаются со
1.9. Контроллеры последовательной связи Периоды синхронизации ।i।i।।i i i i i при передаче дддддддддд Периоды чтения [ при приеме । । MARK SPACE РЕЖИМЫ 2, 3 Периоды синхронизации |— при передаче Периоды чтения при приеме D5 D6 D7 D8YsJOp dI I Puc. 1.S5. Работа последовательного интерфейса UART в режимах I, 2, 3: а) функциональная схема в режиме асинхронного дуплекса; б) временные диаграммы. входа RX0. По окончании приема принятые данные размещены в регистре SBUF0, а стоп-бит запоминается в специальном бите регистра управления RB80 (SCONO.2) (Ninth Receive Bit). Передача начинается немедленно после записи МК байта данных в регистр SBUF0. Флаг прерывания передатчика устанавливается в начале периода синхро низании стоп-бита. Прием данных может начаться в любое время при условии, ч го бит разрешения приема RENO (SCON0.4) установлен. После приема стои-бн га принятые данные переписываются в буферный регистр приемника при уело пин, что флаг прерывания приемника RI0 сброшен, уровень стоп-бита — логи- ческая I и бит разрешения мультипроцессорного режима SM20 (SCON.5) (Multiprocessor Communication Enable) также установлен в состояние логической I. Если все эти условия выполнены, то 8-битное значение данных будет записано и буферном регистре приемника, а стоп-бит — в RB80 (SCON0.2). Если эти уело пня не выполняются, го сохранения данных и сгоп-бпга не производится и фла) прерывания приемника RI0 не ycr.iiiaiviiiiiaeTCM.
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx Скорость передачи в режиме I определяется временем переполнения одного из выбранных таймеров: таймера I или таймера 2 (см. Рис. 1.30). Если выбран таймер 1, то он должен быть сконфигурирован для работы в ре- жиме 2: 8-битный счетчик/таймер с автоперезагрузкой (см. п. 1.8.1.1 на стр. 52) и скорость передачи BR может быть вычислена по формуле BR = (2smodo / 32)(SYSCLK- 12(Т1М "1 >)/(256 - TH 1), где SYSCLK — частота системной синхронизации (Гц); ТН1 — значение кода в регистре TH 1; SMODO — значение бита разрешения удвоителя (UARTO Baud Rate Doubler Enable) (PCON.7); TIM — значение бита выбора синхронизации таймера 1 (Timer 1 Clock Select) (CKCON.4). Если выбран таймер 2, то он должен быть сконфигурирован для работы в ре- жиме 2: генератор импульсов синхронизации для последовательного интерфейса (см. п. 1.8.1.2) и скорость передачи BR может быть вычислена по формуле BR = SYSCLK / (32 (65536 - [RCAP2H, RCAP2L])), где SYSCLK — частота системной синхронизации (Гц); RCAP2H, RCAP2L — значение кода в регистрах RCAP2H, RCAP2L. В режиме 2 каждая посылка содержит 11 бит (Рис. 1.55,6): 1 старт-бит (START BIT), 8 бит данных D0...D7 (младшими битами вперед), программируемый бит D8 и 1 стоп-бит (STOP BIT). Режим 2 поддерживает мультипроцессорную связь и аппаратное распознавание адреса. При передаче девятый бит определяется значе- нием бита ТВ80 (SCONO.3) (Ninth Transmission Bit). Этому биту может быть на- значено значение в соответствии с состоянием флага паритета Р (для протоколов с контролем по четности/нечетности) либо он может использоваться как указа- тель адрес/данные в мультипроцессорной связи. При приеме девятый бит разме- шается в бите RB80 (SCON0.2), а стоп-бит не запоминается. Передача в режиме 2 начинается немедленно после записи МК байта данных в регистр SBUFO. Флаг прерывания передатчика устанавливается в начале перио- да синхронизации стоп-бита. Прием данных может начаться в любое время при условии, что бит разрешения приема RENO (SCON0.4) установлен. После приема стоп-бита принятые данные переписываются в буферный регистр приемника при условии, что флаг прерывания приемника RI0 сброшен и выполнено одно из сле- дующих условий: • SM20 (SCON.5) = 0; • SM20 (SCON.5) = 1, девятый бит = 1 и принятый ранее адрес соответствует данному устройству. В этом случае 8-битное значение данных будет записано в буферном регистре приемника, девятый бит — в RB80 (SCON0.2) и установлен флаг прерывания приемника RI0. Если эти условия не выполняются, то сохранения данных и де- вятого бита не производится и флаг прерывания приемника RI0 не устанавлива-
1.9. Контроллеры последовательной связи ется. Скорость передачи в этом режиме фиксированная: SYSCLK./32 или SYSCLK/64, в зависимости от состояния бита SMODO (0 или I). В режиме 3 контроллер UARTO использует протокол режима 2 и принципы синхронизации режима I. В режимах 2 и 3 контроллер поддерживает мультипроцессорную связь между ведущим процессорам и несколькими ведомыми процессорами с использованием девятого бита и аппаратного распознавания адреса (Рис. 1.56). Ведущее устройс- тво начинает передачу с адресного байта для выбора одного или нескольких ведо- мых устройств. Байт адреса в отличие от байта данных сопровождается девятым битом, равным 1, в то время как при передаче данных этот бит всегда равен 0. Адрес интерфейса UARTO определяется содержимым двух регистров: регистра адреса SADDR0 и регистра разрешения адреса SADEN0. Последний содержит битовую маску для адреса, записанного в регистре SADDR0: единицы в маске указывают биты, которые являются существенными в адресе, нули же соответс- твуют битам, состояние которых не имеет значения, например: SADDR0 = 00110101 SADEN0 = 00001111 Адрес UARTO = xxxxOlOl Установкой SM20 (SCON.5) = 1 можно сконфигурировать контроллер UART0 таким образом, что он будет генерировать прерывание, только если при поступ- лении стоп-бита обнаруживается, что девятый бит RB80 = 1 и данные в приемном буфере соответствуют адресу ведомого. В подпрограмме обработки прерывания выбранный таким образом ведомый процессор должен обнулить бит SM20 для разрешения прерываний при получении последующих байтов данных. После за- вершения приема сообщения ведомый процессор должен снова установить этот бит для игнорирования всех поступающих данных до момента получения вновь соответствующего адреса ведомого. Множество адресов может быть назначено одному ведомому, и/или один и тот же адрес может быть назначен множеству ве- зомых, разрешая одновременную трансляцию для множества ведомых. Адрес ве- зомого для этого режима представляет собой логическое ИЛИ содержимого ре- । петров SADDR0 и SADEN0, где пули в результате трактуются как биты, не име- ющие значения. Обычно адрес Fill подгвержд зегся всеми ведомыми,
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx трактующими биты, не имеющие значения, как I. Таким образом, ведущий про- цессор может быть сконфигурирован для получения сообщений от всех ведомых либо протокол может быть реализован так, что ведомый и ведущий меняются ро- лями, реализуя дуплексную связь между двумя устройствами. Структура регистра управления контроллера последовательного интерфейса SCONO (UARTO Control Register) приведена на Рис. 1.57. Следует отметить, что биты 7, 6, 5 этого регистра выполняют двойную функцию, в зависимости от со- стояния бита доступа статус/режим SSTATO (PCON.6) (UARTO Enhanced Status Mode Select): нулевое состояние этого бита обеспечивает доступ к битам режима SMOO, SM10, SM20, а единичное — к флагам ошибок FEO, RXOVO, TXCOLO. R/W R/W R/W R/W R/W R/W R/W R/W | SM00/FE01 SMJO/RXOVO|SM20/TXCOLO | RENO | ТВ80 | RB80 | TI0 I RIO I Значение после сброса: Адрес SFR: 98Н 1 о 1 0 1 0 1 “о | о 0 0 I 0 I Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 БитО Рис. 1.57. Регистр управления контроллера последовательного интерфейса UARTO (SCONO) Биты 7, 6 Функция этих битов определяется состоянием бита SSTATO (PCON.6): если SSTATO = 1, состояния битов соответствуют флагам ошибок (ошибки фрейма FE0 и ошибки перезаписи приемника RXOVO); если SSTATO = 0, состояния битов определяют режим работы UARTO: SM00 SM10 Режим 0 0 Режим 0: синхронная передача 0 1 Режим 1: асинхронная передача 8 бит, переменная скорость I 0 Режим 2: асинхронная передача 9 биг, постоянная скорость I 1 Режим 3: асинхронная передача 9 бит, переменная скорость Бит 5 SM20 — разрешение мультипроцессорной связи. Если SSTATO = 1, состояние бита соответствует флагу ошибки пердачи TXCOLO. Если SSTATO = 0, функция бита зависит от режима работы UARTO: режим 0 — не используется; режим 1 — управляет проверкой стоп-бита (если бит равен 0, то логичес- кий уровень стоп-бита игнорируется, если бит равен 1, то флаг запроса прерывння приемника RI0 устанавливается только в том случае, если ло- гический уровень стоп-бита — 1); режимы 2 и 3 —разрешение мультипроцессорной связи (если бит равен О, то логический уровень девятого бита игнорируется, если бит равен 1, то флаг запроса прерывния приемника RI0 устанавливается только в том случае, если логический уровень девятого бита — 1 и принятый адрес ве- домого соответствует адресу данного устройства или общему адресу).
1.10. Аналоговые периферийные устройстве Бит 4 RENO — разрешение приема. О: прием запрещен. I: прием разрешен. Бит 3 ТВ80 — девятый передаваемый бит. Используется только в режимах 2 и 3. Устанавливается и сбрасывается программно. Бит 2 RB80 — девятый принимаемый бит. Состояние бита соответствует логическому уровню принятого девятого бита в режимах 2 и 3. В режиме I, если SM20 = 0, состояние бита соответс- твует уровню принятого стоп-бита. В режиме 0 этот бит не используется. Бит I TI0 — флаг прерывания передатчика. Устанавливается аппаратно после передачи восьмого бита в режиме 0 или после передачи стоп-бита в остальных режимах. Если прерывания от UARTO разрешены, то установка флага вызывает переход процессор i к подпрограмме обработки прерываний от UARTO. Этот бит должен быть обнулен вручную с помощью программы. Бит 0 RI0 — флаг прерывания приемника. Устанавливается аппаратно после приема байта (в соответствии с состоя нием бита SM20). Если прерывания от UARTO разрешены, то установка флага вызывает переход процессора к подпрограмме обработки прерыва ний от UARTO. Этот бит должен быть обнулен вручную с помощью про граммы. Флагошибки передачи TXCOLO (SCONO.5) (Transmit Collision Bit) устанавли вается во всех режимах, если процессор пытается записать очередной байт до за вершения передачи текущего. Флаг ошибки фрейма FEO (SCONO.7) (Frame Error Bit) и флаг перезаписи при емника RXOVO (SCONO.6) (Receive Overrun Bit) устанавливаются только в асинх ронных режимах I, 2 и 3. Первый устанавливается в случае получения некоррект- ного стоп-бита (логический 0), а второй — если вновь пришедший байт данных за писывается в приемный буфер до того, как процессор считал предыдущий байт. 110. Аналоговые периферийные устройства Аналоговые периферийные устройства МК С8051F020 включают два аналоге цифровых преобразователя, два цифро-аналоговых преобразователя, генератор опорного напряжения и два аналоговых компаратора. 1.10.1. Аналого-цифровые преобразователи Преобразователь AIM 0 предшавляет собой 12-битный аналого-цифровой преобразователь (АЦП), обеспечивающий максимальную частоту выборки до 100 КГц. Схема прсобра ювазеля приведена па Гис. 1.58. Центральным узлом этого ус-
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx 12 ADOEN AV+ I ADCOGTH I I ADCOGTL | | ADCOLTH | | ADCOLTL | 24 PGAO AGND AMXOSL AMXOCF - Переполнение таймера 2 KdKiFii^DOWINT ратор 10|-CNVSTR 11 Рис. 1.5S. Функциональная схема аналого-цифрового преобразователя ADC0. 9- каналь- ный мульти- плексор AMUX0 AGND 12-битный АЦП поразрядного уравновешивания ADCOCN -ADOBUSY(W) 01 - Переполнение таймера 3 00 тройства является 12-битный АЦП поразрядного уравновешивания (SAR — Successive-Approximation-Register ADC), выходной результат которого записыва- ется в регистры ADCOH (ADCO Data Word MSB Register) и ADCOL (ADCO Data Word LSB Register). Аналоговый сигнал поступает на вход АЦП через 9-канальный аналоговый мультиплексор и усилитель с программируемым коэффициентом уси- ления (Programmable Gain Amplifier — PGAO), co встроенной схемой слежения-за- хвата (track-and-hold), обеспечивающей фиксацию преобразуемого сигнала на время преобразования. Кроме того, АЦП снабжен так называемым оконным де- тектором (Window Detector), позволяющим аппаратно определить, находится ли результат преобразования в пределах «окна», образованного двумя границами. В состав оконного детектора входят цифровой компаратор и две пары регистров гра- ниц: верхней ADCOGTH (ADCO Greater-Then Data High Byte Register), ADCOGTL (ADCO Greater-Then Data Low Byte Register) и нижней ADCOLTH (ADCO Less-Then Data High Byte Register), ADCOLTL (ADCO Less-Then Data Low Byte Register). За- гружая определенные значения в эти регистры, можно заставить цифровой ком- паратор генерировать флаг запроса прерывания от оконного детектора AD0WINT (ADCOCN. 1) (ADCO Window Compare Interrupt Flag), когда результат преобразова- ния лежит как внутри, так и снаружи «окна», образованного соответствующими границами. Кроме того, в состав ADC0 входит встроенный аналоговый датчик
1.10. Аналоговые периферийные устройства температуры. Зависимость выходного напряжения датчика от температуры имее! линейный характер (Рис. 1.59). Для обеспечения работы преобразователя на его служебные входы поступают импульсы системной тактовой частоты SYSCLK и опорное напряжение REF. Аналоговый мультиплексор AMUXO (см. Рис. 1.58) имеет 9 аналоговых вхо- дов, 8 из которых подключены к внешним выводам МК — аналоговым входам AIN0...AIN7 (Analog Input), а к девятому подключен выход аналогового датчика температуры. С помощью регистра конфигурации аналогового мультиплексора AMXOCF (AMUXO Configuration Register) отдельные (SE — Single Ended) аналога вые входы могут быть объединены в дифференциальные (DIFF— Differential) па- ры, как это показано на Рис. 1.58. С помощью второго управляющего регистра AMXOSL (AMUXO Channel Select Register) можно выбрать текущий канал для из- мерений (Табл. 1.7). Переключение каналов может быть выполнено в процессе выполнения программы МК, т. е. «налету» (“on-the-fly”). После сброса МК все каналы сконфигурированы как отдельные. Рис. 1.59. Передаточная характеристика температурного датчика. Регистр конфигурации преобразователя ADCOCF (ADCO Configuration Register) задает коэффициент усиления усилителя PGA0 и частоту синхронизации преобразователя. Выбор коэффициента усиления (1, 2, 4, 8, 16 или 0.5) произво- дится с помощью трех младших битов этого регистра AMP0GN[2:0| (ADC0 Internal Amplifier Gain — PGA). После сброса МК состояние этих битов ООО, что соответствует коэффициенту усиления 1. Состояние пяти старших битов этого регистра AD0SC|4:O| (ADCO SAR Conversion Clock Period Bits) для желаемой час- тоты синхронизации иреобра шпателя CI KSAR0 (максимальное значение 2.5 МГц) можно вычислить ио формуле ADOSC[4 (I| SYSCI K/CI KSARU- I.
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx Таблица 1.7. Выбор каналов аналогового мультиплексора AMX0AD [3:0] 0000 0001 0010 ООП 0100 0101 0110 0111 Ixxx AMX0CF [3:0] 0000 AIN0 AINI AIN2 AIN3 AIN4 AIN5 AIN6 AIN7 Датчик температуры 0001 +(AIN0) - (AIN1) AIN2 AIN3 AIN4 AIN5 AIN6 AIN7 Датчик температуры 0010 AINO AINI +(AIN2) —(AIN3) AIN4 A1N5 AIN6 AIN7 Датчик температуры ООП +(AIN0) —(AIN1) +(AIN2) —(AIN3) AIN4 AIN5 AIN6 AIN7 Датчик температуры 0100 AINO AINI AIN2 AIN3 +(AIN4) —(AIN5) AIN6 AIN7 Датчик температуры 0101 +(AIN0) —(AINI) AIN2 AIN3 +(AIN4) —(AIN5) AIN6 AIN7 Датчик температуры ОНО AINO AINI +(AIN2) —(AIN3) +(A1N4) —(AIN5) AIN6 AIN7 Датчик температуры 0111 +(AIN0) -(AINI) +(AIN2) —(AIN3) +(AIN4) —(AIN5) AIN6 AIN7 Датчик температуры 1000 AINO AINI AIN2 A1N3 AIN4 AIN5 +(AIN6) —(AIN7) Датчик температуры 1001 +(AIN0) -(AINI) AIN2 AIN3 AIN4 AIN5 +(AIN6) —(AIN7) Датчик температуры 1010 AINO AINI +(AIN2) —(AIN3) AIN4 AIN5 +(AIN6) —(AIN7) Датчик температуры 1011 +(AIN0) -(AINI) +(AIN2) —(AIN3) AIN4 AIN5 +(AIN6) —(AIN7) Датчик температуры 1100 AINO AINI AIN2 AIN3 +(AIN4) —(AIN5) +(AIN6) —(AIN7) Датчик температуры 1101 +(AIN0) -(AINI) AIN2 AIN3 +(AIN4) -(AIN5) +(AIN6) —(AIN7) Датчик температуры 1110 AINO AINI +(AIN2) —(AIN3) +(AIN4) —(AIN5) +(AIN6) —(AIN7) Датчик температуры 1111 '(AINO) (AINI) +(AIN2) —(AIN2) +(AIN4) —(AIN5) +(AIN6) —(AIN7) Датчик температуры Управление работой преобразователя осуществляется с помощью битов и фла- гов регистра управления ADC0CN (ADCO Control Register). Установка в 1 бита раз- решения работы преобразователя ADOEN (ADC0CN.7) (ADCO Enable Bit) перево- дит его в рабочий режим. Выбор источника, вызывающего запуск преобразовате- ля, производится с помощью битов режима запуска AD0CM[ 1:0] (ADC0CN.[3:2]) (ADCO Start of Conversion Mode Select). В зависимости от состояния этих битов (см. Рис. 1.58) может быть выбран один из следующих источников: • запись I в бит занятости преобразователя ADOBUSY (ADC0CN.4) (ADCO Busy Bit); • переполнение таймера 3; • нарастающий фронт сигнала на внешнем входе запуска преобразователя CNVSTR (Start of Conversion), назначаемом с помощью матричного коммута- тора на одну из линий портов ввода/вывода МК (см. п. 1.3.2 на стр. 32); • переполнение таймера 2.
7.10. Аналоговые периферийные устрой В течение процесса преобразования бит занятости преобразова" AD0BUSY сохраняет состояние логической I, а в конце преобразования сбра вается, одновременно устанавливая флаг запроса прерывания от преобразова по завершении преобразования ADOINT (ADC0CN.5) (ADCO Conver Complete Interrupt Flag). К этому моменту результат преобразования оказывас записанным в паре регистров ADC0H и ADC0L. 12-битный результат прсобр! вания размещается в этих регистрах сдвинутым вправо (AD0LJST = 0) или ил (AD0LJST = 1), в зависимости от состояния бита выбора выравнивания вл ADOLJST (ADC0CN.0) (ADCO Left Justify Select). Бит режима слежения ADOTM (ADC0CN.6) (ADCO Track Mode Bit) упраш режимом слежения. Когда этот бит находится в исходном нулевом состоянии, время, что преобразователь ожидает запуска, производится слежение за входи напряжением. В этом случае процесс преобразования начинается немедлс! после активации любого из источников запуска и длится 15 периодов такки частоты преобразователя SAR Clocks, как это показано на Рис. 1.60. Если CNVSTR (AD0STM[1:0]=10) SAR Clocks 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1ЖЖЖШ^Ш1ППППППППППППППП Режим JVIJVI или преобразование Режим малой мощности (ММ ADC0TM=1 ADC0TM=0 (AD0STM[1:0)=00, 01, 11) SAR Clocks ADC0TM-1 Слежение Слежение или преобразование Преобразование Преобразование Слежение Переполнение таймера 2, таймера 3, запись 1 в AD0BUSY Режим ММ или преобразование Режим мало| мощности (Ml 1 2 3 4 5 6 7 8 9 10 И 12 13 14 15 16 17 18 19 жшшшппппппппппппппппп Слежение Преобразование SAR Clocks 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ЕЖШЖ^ШПППППППППППППП ADC0TM=0 Слежение или преобразование Преобразование Слежение б) Рис. 1.60. Временные диаграммы режими слежения-захвата АЦП ADCO а) для запуска <н внешнего источника; б) для запуска о i nnyipciiiinx источников
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx ADOTM = I, то преобразователь работает в режиме слежения малой мощности (ММ). В этом случае преобразованию предшествует определенный период слеже- ния, который в случае использования сигнала внешнего запуска CNVSTR имеет длительность, равную длительности низкого уровня этого сигнала (см. Рис. 1.60,а), а в случае использования внутренних источников запуска имеет дли- тельность трех периодов тактовой частоты SAR Clocks (см. Рис. 1.60,6). Этот ре- жим может быть использован при переключениях аналогового мультиплексора и изменении коэффициента усиления усилителя: как правило, трех периодов так- товой частоты преобразователя бывает достаточно для затухания переходных процессов на входе преобразователя, вызванных переключениями. Преобразователь ADC1 представляет собой 8-битный АЦП, обеспечивающий максимальную частоту выборки до 500 КГц. Схема преобразователя приведена на Рис. 1.61. Центральным узлом этого устройства является 8-битный АЦП пораз- рядного уравновешивания, выходной результат которого записывается в регистр ADC1 (ADC1 Data Word Register). Аналоговый сигнал поступает на вход АЦП че- рез 8-канальный аналоговый мультиплексор (Analog Multiplexer — AMUX1) и уси- литель с программируемым коэффициентом усиления (Programmable Gain Amplifier — PGA1), co встроенной схемой слежения-захвата (track-and-hold), обеспечивающей фиксацию преобразуемого сигнала на время преобразования. Для обеспечения работы преобразователя на его служебные входы поступают им- пульсы системной тактовой частоты SYSCLK и опорное напряжение REF. AV+ AD1EN AV+ AIN1.0 [3-► AIN1.1 AIN1.2 И-► AIN1.3 0—► AIN1.4 0—► AIN1.5 0—► AIN1.6^-> AIN1.7 0—► СЛ со 8 кан ль ный мульти- плексор - AMUX1 PGA1 AGND ADC1CF ADC1CN AMX1SL ООО 001 — Переполнение таймера 2 — Запись в AD0BUSY (Синхронно с ADC0) — Запись в AD1 BUSY — Переполнение таймера 3 0101—CNVSTR 011 1хх Рис. 1.61. Функциональная схема аналого-цифровою iipcoiip-uoua геля ADC1 8-битный АЦП поразрядного уравновешивания Начало преобра- зования
1.10. Аналоговые периферийные устройства Аналоговый мультиплексор AM UXl (см. Рис. 1.61) имеет 8 аналоговых входов AIN1.0...AIN1.7, подключенных к выводам порта I МК Р1.0...Р1.7. Выводы порта О, которые предполагается использовать как входы ADC1, необходимо сконфигу- рировать как аналоговые путем записи 0 в соответствующие биты регистра выбо- ра режима порта 1 P1MD1N (Port 1 Input Mode Register). Выводы, сконфигуриро- ванные как аналоговые, пропускаются при назначении линий портов для других периферийных узлов с помощью матричного коммутатора (см. п. 1.3.2 на стр. 32). С помощью управляющего регистра AMX1SL (AMUX1 Channel Select Register) можно выбрать текущий канал для измерений. Для этого достаточно за- писать в младшие 3 бита этого регистра AMX1AD[2:O] (AMX1SL[2:O]) (АМХ1 Address Bits) двоичный код нужного канала. Регистр конфигурации преобразователя ADC1CF (ADC1 Configuration Register) задает коэффициент усиления усилителя PGA1 и частоту синхронизации преобразователя. Выбор коэффициента усиления (1, 2, 4 или 0.5) производится с помощью двух младших бигов этого регистра AMP1GN[1:O] (ADC1 Internal Amplifier Gain — PGA). После сброса МК значение этих битов равно 00, что соот- ветствует коэффициенту усиления 0.5. Значение пяти старших битов этого регис- тра ADISC[4:0] (ADC1 SAR Conversion Clock Period Bits) для желаемой частоты синхронизации преобразователя CLKSAR1 (максимальное значение 6 МГц) можно вычислить по формуле AD1SC[4:O] = SYSCLK / CLKSARI - 1. Управление работой преобразователя осуществляется с помощью битов и флагов регистра управления ADC1CN (ADC1 Control Register). Установка в 1 би- та разрешения работы преобразователя AD1EN (ADC1CN.7) (ADC1 Enable Bit) переводит его в рабочий режим. Выбор источника, вызывающего запуск преоб- разователя, производится с помощью битов режима запуска AD1CM[2:O| (ADC1CN.[3:1]) (ADC1 Start of Conversion Mode Select). В зависимости от состо- яния этих битов (см. Рис. 1.61) может быть выбран один из следующих источни- ков: • запись 1 в бит занятости преобразователя ADI BUSY (ADC1CN.4) (ADC1 Busy Bit); • переполнение таймера 3; • нарастающий фронт сигнала на внешнем входе запуска преобразователя CNVSTR (Start of Conversion), назначаемом с помощью матричного коммута- тора на одну из линий портов ввода/вывода МК (см. п. 1.3.2 на стр. 32); • переполнение таймера 2; • запись 1 в бит занятости преобразователя ADOBUSY (ADC0CN.4) (ADCO Busy Bit) — запуск синхронно с ADCO. В течение процесса преобразования бит занятости преобразователя AD1BUSY сохраняет состояние логической 1, а в конце преобразования сбрасы цагтся, одновременно устаиав шпая флаг запроса прерывания от преобразователя но завершении преобразования ADHNl (ADC1CN.5) (ADC1 Conversion
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx Complete Interrupt Flag). К этому моменту результат преобразования оказывается ^писанным в регистре ADC1. Бит режима слежения AD1TM (ADCICN.6) (ADC1 Track Mode Bit) управляет режимом слежения. Когда этот бит находится в исходном нулевом состоянии, все время, что преобразователь ожидает запуска, производится слежение за входным напряжением. В этом случае преобразование начинается немедленно после акти- вации любого из источников запуска и длится 8 периодов тактовой частоты пре- образователя SARI Clocks, как это показано на Рис. 1.62. Если же AD1TM = 1, то преобразователь работает в режиме слежения малой мощности (ММ). В этом слу- чае преобразованию предшествует определенный период слежения, который в случае использования сигнала внешнего запуска CNVSTR имеет длительность, равную длительности низкого уровня этого сигнала (см. Рис. 1.62,а), а в случае использования внутренних источников запуска имеет длительность трех перио- CNVSTR (AD1CM[2:0]=010) SAR1 Clocks Режим ММ или преобразование Слежение Преобразование Режим малой мощности (ММ) Слежение или преобразование Преобразование Слежение Переполнение таймера 2, Переполнение таймера 3, запись 1 в AD1BUSY, запись 1 в ADOBUSY (AD 1 СМ [2:0] = = 000,001,011, 1хх) SAR1 Clocks AD1TM=1 Режим ММ или преобразование Слежение Преобразование Режим малой мощности (ММ) SAR1 Clocks AD1TM=O 123456789 1ПППППППП Слежение или преобразование Преобразование Слежение Рис. 1.62. Временные диаграммы режима слежения-захвата АЦП ADC1: а) для запуска от внешнего источника; б) для запуска от внутренних источников
1.10. Аналоговые периферийные устройств<. дов SARI Clocks (см. Рис. 1.62,6). Этот режим может быть использован при пере- ключениях аналогового мультиплексора и изменении коэффициента усилеппз усилителя: как правило, трех периодов синхронизации преобразователя бывае) достаточно для затухания переходных процессов на входе преобразователя, вы- званных переключениями. 1.10.2. Цифро-аналоговые преобразователи Схема МК C8051F020 содержит два идентичных 12-битных цифро-аналого вых преобразователя (ЦАП): DAC0 и DAC1. Ниже приведено описание только для преобразователя DAC0. Заменив в описании индекс 0 на 1, можно легко полу чить описание для преобразователя DAC1. Выход преобразователя представляет собой напряжение в диапазоне O...VREF(1 —1/212) В, пропорциональное входному коду в диапазоне 000H...FFFH, где VREF — опорное напряжение. Функциональная схема ЦАП DAC0 приведена на Рис. 1.63. Рис. 1.63. Функциональная схема цифро-аналогового преобразователя DAC0. Кроме собственно преобразователя DAC0, коэффициент преобразования ко- торого определяется напряжением источника опорного напряжения VREE, схема содержит пару регистров данных преобразователя DACOH (DACO High Byte Register) и DACOL (DACO Low Byte Register), пару регистров-защелок, мульти плексор входных данных, мультиплексор синхронизации и выходной повтори гель, выход которого подключен непосредственно к аналоговому выходу МК DAC0. Управление работой преобразователя осуществляется с помощью управля ющего регистра DACOCN (DACO Control Register). Старший бит этого регистра — бит разрешения работы преобразователя DACOEN (DACOCN.7) (DACO Enable Bit). Если DACOEN = 0, преобразователь вы- ключен, ток потребления сосшвляег менее 1 мкА, а его выход DAC0 находится в высокоимпедансном состоянии 1 ели DACOFN = 1, то преобразователь включен, а его выход активен.
юва 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx Три младших бита этого регистра — биты выбора формата данных )AC0DF[2:0] (DAC0CN[2:0]) (DACO Data Format Bits), управляя мультиплексо- ром данных, позволяют выбрать один из 5 возможных вариантов размещения 12- ипного входного слова преобразователя (dddd dddd dddd) в 16-битном про- гранстве пары регистров данных DAC0H и DAC0L: DAC0H 0000dddd 000d dddd OOdd dddd Oddd dddd dddd dddd DACOL dddd dddd dddd dddO dddd ddOO dddd dOOO dddd 0000 Данное свойство позволяет масштабировать коэффициент передачи преобра- зователя без изменения входного слова, а также использовать как преобразова- тель с разрешением от 4 до 8 бит, загружая входное данное только в старший рс- нстр DAC0H и сохраняя в регистре DAC0L постоянное значение (чаше всего 1011). Момент передачи данных из регистров DAC0H и DAC0L в регистры-защелки шределяет момент изменения аналогового напряжения на выходе DAC0 и зави- лп от режима работы преобразователя. Режим задается двумя битами режима l)AC0MD[l:0] (DAC0CN[4:3|) (DACO Mode Bits), которые управляют работой мультиплексора синхронизации (см. Рис. 1.63). С помощью этого мультиплексо- ра в качестве источника синхронизации можно выбрать импульс записи в регистр DAC0H или импульсы переполнения одного из таймеров (3, 4 или 2). В первом случае изменения напряжения на выходе DAC0 будут происходить в момент за- писи значения в регистр DAC0H. Для корректной работы 12-битного преобразо- вателя в этом режиме следует сначала производить запись в младший регистр DAC0L, а затем в старший — DAC0H. Режим синхронизации от таймеров приме- няется для точной синхронизации при формировании аналогового сигнала, что- бы моменты изменения выходного напряжения преобразователя не зависели от переменного времени реакции процессора на прерывание. В этом случае измене- ние кода в регистрах-защелках преобразователя происходит точно в момент пере- полнения таймера, а в подпрограмме обработки прерывания от таймера следует загрузить новое значение в регистры DAC0H и DAC0L. 1.10.3. Схема формирования опорного напряжения Функциональная схема формирования опорного напряжения для АЦП и ЦАП в МК C8051F020 показана на Рис. 1.64. Три внешних вывода VREF0, VREF1 и V|U Е|) позволяют отдельно для преобразователей ADCO, ADC1 и пары DAC0, DAC1 выбрать в качестве источника опорного напряжения как внешнюю (как правило, на основе параметрического стабилизатора), так и внутреннюю схему генератора опорного напряжения. Кроме того, ADC0 может использовать в ка- честве опорного выходное напряжение преобразователя DACO, a ADC1 может ис- пользовать как опорное напряжение питания аналоговой части МК — AV+. Вы-
110. Аналоговые периферийные устройства Г VDD | Внешняя! 2 । схема । L]R| I генератора। ' ’—Ь опорного I Ж I напряжения I I I dgndJ I VrefdI Vref| 4.7 мкФ J-----L 0.1 мкФ Рекомендуемые конденсаторы НЧ фильтра BIASE Напряжение смещения -------1------ на ADCO, ADC1, EN DACO, DAC1 Опорный генератор напряжения 1.2 В Рис. 1.64. Функциональная схема формирования опорного напряжения. бор соответствующего источника производится с помощью внутренних мульти- плексоров опорного напряжения (см. Рис. 1.64). Схема внутреннего источника опорного напряжения содержит опорный генера- тор напряжения 1.2 Вс коэффициентом температурной нестабильности 151СГ6 1/°С и масштабный буферный усилитель с коэффициентом усиления 2. Выход последне- го подключен к внешнему выводу VREF. При использовании внутреннего генерато- ра рекомендуется к этому выводу подключить фильтрующие конденсаторы, как это показано на Рис. 1.64. Номинальное напряжение внутреннего источника, таким об- разом, составляет 2.4 В. Управление работой схемы производится с помощью битов регистра управле- ния опорным напряжением REFOCN (Reference Control Register). Бит разреше- ния генератора смешения BIASE (REFOCN.1) (ADC/DAC Bias Generator Enable Bit) должен быть равен 1, если используется хотя бы один из преобразователей. Биг разрешения буферного усилителя внутреннего генератора REFBE (REF0CN.0) (Internal Reference Buffer Enable Bit) должен быть установлен в I, ес- III хотя бы один из преобразователей использует внутренний генератор опорного напряжения (установлена одна или несколько перемычек на соответствующих внешних выводах). Управляющие биты выбора источника опорного напряжения
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx ADCOVRS (REF0CN.4) (ADCO Voltage Reference Select) и ADCIVRS (REF0CN.3) (ADC I Voltage Reference Select) управляют работой мультиплексоров опорного напряжения преобразователей ADCO и ADC1 (см. Рис. 1.64). Кроме того, в этом же управляющем регистре находится и бит разрешения тем- пературного датчика ТЕМ РЕ (REF0CN.2) (Temperature Sensor Enable Bit), управля- ющий включением встроенного температурного датчика (см. п. 1.10.1 на стр. 97). 1.10.4. Аналоговые компараторы Каждый МК C8051F020 содержит по два аналоговых компаратора. Функцио- нальная схема аналоговых компараторов приведена на Рис. 1.65. Входы каждого из компараторов подключены к выводам МК: CP0+, СРО— (входы компаратора 0) и СР1+, СР1— (входы компаратора 1). Напряжение на входах компаратора не должно выходить за допустимый диапазон — 0.25...(AV+) + 0.25 В. Выходы компа- раторов через схему синхронизации могут быть назначены на линии портов вво- да/вывода МК с помощью матричного коммутатора (см. п. 1.3.2 на стр. 32). Кроме того, выход компаратора СРО дополнительно подключен к схеме сброса МК и мо- жет использоваться как источник сброса (см. п. 1.5.1 на стр. 41). Управление работой компараторов осуществляется с помощью битов и фла- гов управляющих регистров компараторов CPT0CN и CPT1CN (Comparator Control Register). Структура и функции этих регистров совершенно идентичны, поэтому ниже дается описание битов и флагов только для компаратора 0. Синхронизатор К матричному коммутатору К контроллеру прерываний К матричному коммутатору К контроллеру прерываний Рис. 1.65. Функциональная схема ан.inniuiu.tx кимппраторон
7.10. Аналоговые периферийные устройства Если бит разрешения работы компаратора О CPOEN (CPT0CN.7) (Comparator О Enable Bit) находится в состоянии 0, то компаратор выключен, ток потребления падает ниже I мкА, а на его выходе, если он назначен на один из выводов МК, на- пряжение близко к нулевому. Установка в I бита разрешения CP0EN переводит компаратор в активное рабочее состояние. Соотношение между входными па пряжениями компаратора можно программно проконтролировать по флагу со- стояния выхода CPOOUT (CPT0CN.6) (Comparator 0 Output State Flag): если CPOOUT = 0, то VCP0+ < VCP0_, если CPOOUT = I, СР0+ > СРО— . Изменение па пряжения на выходе компаратора может вызвать установку одного из двух флагов запроса прерывания от компаратора: по нарастающему фронту выходного сигна- ла CPTORIF (CPT0CN.5) (Comparator 0 Rising-Edge Interrupt Flag) или по падаю щему фронту — CPTOFIF (CPT0CN.4) (Comparator 0 Falling-Edge Interrupt Flag) Если прерывания разрешены, то установка этих флагов вызывает ветвление про- цессора к подпрограмме обработки прерывания от компаратора 0. Указанные флаги аппаратно не сбрасываются, поэтому должны быть обнулены в программе обработки прерывания (см. п. 1.6.2 на стр. 48). С помощью управляющих битов регистра CPT0CN можно запрограммиро- вать положительный и отрицательный гистерезис компаратора. Компаратор, об ладающий программируемым гистерезисом, удобен для построения схем улучше ния формы сигнала. Влияние гистерезиса на выходной сигнал компаратора по- нятно из временных диаграмм Рис. 1.66. Величина гистерезиса существенна также при реализации на компараторе устройства сравнения релейных систем ав- томатического управления. Напряжение положительного гистерезиса (Программируется с помощью бит СРО HYP) ViN- входы V|N Напряжение отрицательного гистерезиса (Программируется с помощью бит CP0HYN) Voh ВЫХОД Vol------ Положительный гистерезис запрещен — Отрицательный__ | | гистерезис запрещен Максимальный положительный гистерезис __t Максимальный отрицательный гистерезис Рис. 1.66. Временные диаграммы компаратора 0.
Глава 1. Архитектура микроконтроллеров смешанного сигнала C8051Fxxx В регистре CPTOCN имеются два бита управления положительным гистерези- сом CP0HYP[l:0] (CPT0CN[3:2]) (Comparator 0 Positive Hysteresis Control Bits) и два бита управления отрицательным гистерезисом CP0HYN[l:0] (CPT0CN[l:0]) (Comparator 0 Negative Hysteresis Control Bits). Комбинация 00b соответствует гис- терезису 0 мВ, Olb — 2 мВ, ЮЬ — 4 мВ, a I lb — Ю мВ. Таким образом, на кристалле МК имеется мощное процессорное ядро, значи- тельные по объему запоминающие устройства программ и данных, развитая сис- тема ввода/вывода и мощный по своим функциональным возможностям набор цифровых и прецизионных аналоговых периферийных узлов. Это позволяет на базе одного МК практически без применения дополнительных компонентов реа- лизовывать сложные системы управления различными объектами в соответствии с концепцией «Система на кристалле» (“System-on-a Chip”). Процесс разработки микроконтроллерных систем требует применения специальных аппаратных и программных средств, рассматриваемых в следующей главе.
Средства разработки микроконтроллерных систем на базе МК C8051Fxxx Фирма Silicon Laboratories обеспечивает свои МК различными программно аппаратными средствами поддержки разработчика, которые разделяются на еле- дующие категории. • Оценочный комплект (Evaluation Kit) — набор аппаратно-программных средств, позволяющий исследовать и оценить технические возможности МК. • Набор средств проектирования (Development Kit) — набор аппаратно-про- граммных средств, позволяющий построить работающий прототип проект руемого устройства. • Справочный проект (Reference Design) — набор аппаратно-программных средств, позволяющий изучить проект определенного устройства на базе МК с целью его дальнейшей адаптации к решаемой задаче или использования го- товых аппаратных и программных фрагментов при реализации более слож ных проектов. • Инструментальный штеккер (Tool Stick) — набор программных средств, поз воляющий с помощью компактных аппаратных средств, представляющих со бой штеккер, вставляемый в разъем USB персонального компьютера, изучать методы разработки программ для МК. Наиболее универсальными и функционально полными являются наборы средств проектирования. Логика построения этих наборов основана на особен ностях проектирования аппаратных и программных средств систем на базе МК, поддерживающих внутрисистемное программирование и отладку (ISP - In System Programming and Debugging) с использованием концепции «Система на кристал- ле» (SoC - “System-on-a Chip”).
Глава 2. Средства разработки микроконтроллерных систем на базе МК С8051Fxxx 2.1. Процесс разработки аппаратных и программных средств систем на базе МК Схема типового процесса разработки микроконтроллерных систем приведена на Рис. 2.1. На основе анализа технического задания (ТЗ) разрабатывается архи- тектура системы, центральным звеном которой является МК. Разработка архитектуры сводится по сути дела к распределению функций сис- темы между МК и внешними элементами. Распределение функций предполагает Рис. 2.1. Схема процесса разработки микроконтроллерных систем.
2.1 Процесс разработки аппаратных и программных средств систем на базе МК детальное гнакомство разработчика с функциональными возможностями МК. Учитывая, что МК фирмы Silicon Laboratories обладают быстродействующим яд- ром, значительными объемами памяти, возможностью выполнения широкого спектра временных функций, возможностью обработки аналоговых сигналов, функции внешних схем, как правило, ограничиваются так называемым кондици онированием сигнала (т. е. усилением по напряжению или по мощности). Сразу после разработки архитектуры системы процесс разделяется на две вет- ви: разработка аппаратных средств (АС) и разработка программных средств (ПС). Разработка АС начинается с разработки электрических схем, определяющих номенклатуру и связи между компонентами, и заканчивается изготовлением ма- кета (прототипа) для проверки выбранных решений. Проектирование ПС начинается с разработки конфигурации МК. Учитывая сложность структуры МК и универсальность его элементов, этот этап представ- ляет собой достаточно сложную задачу: необходимо определить (вплоть до отде- льных битов) содержимое нескольких сот управляющих регистров и написать программный код подпрограммы инициализации МК после сброса. Это, конеч но, можно сделать, что называется, вручную, работая со справочными данными МК (это сотни страниц технической документации). Более оптимальный путь ре шения этой задачи — использование специального программного средства с удоб ным графическим интерфейсом, которое называется мастер конфигурации (Configuration Wizard). Дальнейшее проектирование ПС связано с разработкой алгоритмов выполне- ния заданных функций системы с последующим кодированием, т. е. написанием исходных кодов на одном из языков программирования. Для проектирования микроконтроллерных систем традиционно используются два языка: язык ассемб- лера (низкого уровня) и язык С (высокого уровня). Первый используют для про- граммирования функций ввода/вывода и функций с критическим временем ис- полнения или расходом памяти. Второй незаменим для программирования функ- ций, требующих сложных математических вычислений, для обработки вещественных чисел (представление с плавающей запятой). В любом случае для подготовки исходных кодов используют программу текстового редактора (EDITOR). Для разработки сложных программ МК-систем, содержащих тысячи строк программного кода, так же как и для больших компьютеров, используют метод модульного программирования. Согласно этому методу программа может содер- жать несколько модулей, которые можно транслировать на машинный язык раз- дельно, получить переместимые объектные модули, а потом скомпоновать моду- ли в единый модуль, пригодный для загрузки в память системы. Кроме того, та- кой подход на этапе компоновки позволяет подключать библиотеку — объектный модуль, содержащий готовые отлаженные подпрограммы, что сокращает общее время проектирования программы. Для реализации модульного программирова пня необходимы специальные программные средства: • АССЕМБЛЕР (ASSEMBI IR) 1ля гринсляцнн программ, написанных на я «ыке ассемблера;
Глава 2. Средства разработки микроконтроллерных систем на базе МК C8051Fxxx • КОМПИЛЯТОР (COMPILER) — для трансляции программ, написанных на языке С; • КОМПОНОВЩИК (LINKER) —для компоновки программы; • БИБЛИОТЕКАРЬ (LIBRARIAN) — для создания и редактирования библио- тек. Заключительный этап разработки — комплексная отладка системы — для МК, поддерживающих внутрисистемное программирование и отладку (ISP), выпол- няется путем загрузки скомпонованного исполняемого модуля непосредственно в память программ МК макета (прототипа) проектируемой системы и выполне- ния операций отладки: полного прогона программы, прогона с остановом в конт- рольных точках, выполнения программы по шагам. Современные средства поз- воляют производить отладку на уровне языка программирования, поэтому поня- тие «шаг» для языка ассемблера означает выполнение одной команды, а для языка С — выполнение одного оператора. При каждом останове процесса про- граммист имеет возможность проверить и/или скорректировать значения пере- менных, состояния ячеек памяти или регистров процессора. Для выполнения от- ладки используется специальное программное средство — ОТЛАДЧИК (DEBUGGER). Из Рис. 2.1 видно (см. штрих-пунктирную линию), что процесс проектирова- ния имеет циклический характер: начиная с этапа трансляции программ могут обнаруживаться различного рода ошибки проектирования, которые требуют из- менения программного кода, алгоритмов работы, конфигурации МК, доработки макета, изменения электрических схем и даже архитектуры системы. Чем выше квалификация разработчика, тем меньше требуется ему «кругов проектирова- ния», тем более оптимальным получается техническое решение: меньше расход памяти и выше быстродействие (как следствие, можно использовать более деше- вую версию МК), меньше требуется внешних электронных компонентов (как следствие, сокращается площадь печатной платы и стоимость аппаратуры систе- мы), уменьшается время разработки. Совершенно очевидно, что для микроконтроллерных систем не очень подхо- дит практика, принятая во многих компаниях, когда один инженер, назовем его электронщик, разрабатывает схему, а другой, назовем его программист, проекти- рует программу. Действительно, в схеме на Рис. 2.1 мы видим две параллельные ветви и кажется, что такое разделение труда сокращает время проектирования. Однако это лишь так кажется. На самом деле цикл проектирования микроконт- роллерной системы составляет несколько месяцев, и время, затрачиваемое на со- гласование между электронщиком и программистом, сводит на нет выигрыш от использования параллельного процесса разработки. Лучше, когда один инженер выполняет разработку от начала до конца. Для этого ему надо быть в какой-то степени универсалом, однако наличие мощных современных средств разработки делает это не только возможным, но и оптимальным. Другая распространенная ошибка многих менеджеров компаний высоких технологий заключается в неправильной опенке относительной трудоемкости разработки программного обеспечения. Дешевизна процесса тиражирования
2.2. Наборы средств проектирования (т. е. производства) программного продукта дает возможность таким менеджерам предположить, что его также просто и разработать. Тем более для микроконтрол лерной системы. Однако это не так. Порядка 90% функций в микроконтроллер ной системе выполняется за счет программы, и она на 90% является той самой оригинальной и сложной частью проекта системы, которую предстоит разрабо- тать. Поэтому менеджер не ошибется, если 80% от средств и времени на разработ ку проекта он отнесет на разработку программы. После успешного завершения комплексной отладки можно приступить к вы пуску конструкторской документации (КД), изготовлению опытного образца и продвижению изделия на рынок. 2.2. Наборы средств проектирования Фирма Silicon Laboratories поставляет наборы средств проектирования для каждого семейства МК. Каждый такой набор включает аппаратные и програм мные средства (Рис. 2.2). Все эти средства предназначены для использования сов- местно с базовым стандартным компьютером пользователя, совместимым с IBM PC, имеющим свободный порт USB, работающим под операционной системой Windows 98SE или более поздней версией (Windows 2000, Windows ХР), имеющим не менее 64 Кбайт оперативной памяти и не менее 40 Мбайт свободного дисково- го пространства. Каждый набор включает в себя макетную плату с размещенным на ней МК. Такая плата обязательно имеет дополнительную зону макетирования, на которой пользователь может разместить свои компоненты или разъем, к которому пользо- ватель может подключить плату со своими дополнительными компонентами. Это предельно упрощает изготовление макета, делая этот этап разработки непродол жительным и дешевым. Кроме этого, в зависимости от семейства, на макетной плате могут быть дополнительные компоненты: различные устанавливаемые не ремычки, дополнительные разъемы, полная схема последовательного интерфей са RS-232, USB или CAN и т. п. Как правило, на макетной плате имеется мини- мум один светодиод и одна кнопка, подключаемые через перемычки к определен ным выводам МК и позволяющие с помощью простейших тестовых программ проконтролировать работоспособность системы проектирования. Кроме того, каждая макетная плата имеет кнопку аппаратного сброса МК и стабилизатор па пряжения питания, которое подается на плату с помощью кабеля и специального адаптера питания (см. Рис. 2.2). Каждая плата имеет также 10-контактный разъем отладочного интерфейса. В зависимости от типа МК в качестве отладочного ин тсрфейса используется JTAG (стандарт фирмы Joint Test Action Group) или C2 (стандарт фирмы Silicon Laboratories). В состав набора входят также кабель USB и адаптер USB-отладочный интер фейс, через которые макетная плата подключается к порту USB базового ком иыотера. К набору прилагается компакт диске документацией и программным обесне ченпем. В состав программною обеспечения входят: интегрированная среда раз
Глава 2. Средства разработки микроконтроллерных систем на базе МК C8051Fxxx Рис. 2.2. Набор средств проектирования микроконтроллерных систем. работки (IDE - Integrated Development Environment); мастер конфигурации (Configuration Wizard); программное обеспечение для разработки программ МК фирмы Keil, включающее компилятор С (демо-версия), ассемблер, компонов- щик, библиотекарь и другие утилиты. Набор позволяет создавать и отлаживать полноценные программы на языке ассемблера. Для полноценного проектирования программ на языке С необходи- мо приобрести полную версию компилятора С, что весьма дорого. Интегриро- ванная среда разработки позволяет подключать п программы других фирм, среди которых есть и бесплатные компиляторы, которые можно загрузить через Интер- нет, однако в этом случае риск от использования таких программ пользователь берет на себя. 2.3. Интегрированная среда разработки Интегрированная среда разработки Silicon Laboratories IDE поддерживает весь процесс проектирования программных средств МК, включая комплексную отладку. Основное окно среды разработки показано на Рис. 2.3. Кроме панели меню и панели инструментов имеются три окна: окно проекта, окно РЕДАКТО- РА и окно сообщений. Окно проекта позволяет видеть и редактировать директорию проекта, т. е. папки и файлы документов проекта. Окно встроенного РЕДАКТОРА позволяет создавать исходные файлы программ, просматривать листинги и другие тексто- вые документы проекта. При работе с исходными файлами па языке ассемблера пли я пике С редактор обеспечивает цветонос кодирование, г. с. разные элементы
2.3 Интегрированная среда разработк Л SII_^CMn«J_eOSlFxw С - х£11аЬзхЙ€5\£калр1ез\С3051РО 2кХ?*зп.чЬ1хпк .obj ТО С :>5а1аЬзХКСи\Екалр1®зхСв051Г0як\АвачЬа ink RSI256 У Pl1681 PWf 78) tXNKzwCAn m «ПРО. 0 W?HING{«S). 0 WOR(S) «3 JeL51 BARKED UHKER'bOCATER V4 16* - £“ C;: C£F?R2GH7 KEIL E1EKTR0KIK GsibH 1987 - 2001' .11 Л bsI.A toil Д Fndm Res / “ V Ready . . .................................... Target: C805bm....PCi W WBtefojrts ????*?? Wccrnected "1л Col 31 .«. _. -ww I Окно сообщений Puc. 2.3. Основное окно интегрированной среды разработки Silicon Laboratories IDI . текста программы, например служебные слова, комментарии, высвечиваются разным цветом. Это позволяет разработчику выявить и устранить значительную часть синтаксических ошибок уже при вводе текста программы с клавиатуры. Окно сообщений позволяет взаимодействовать с компьютером, в частности видеть командные строки запуска различных программ, а также сообщения >тнх программ. Подключение программных средств модульного программирования выпал няется с помощью вкладки Tool Chain Integration (Интеграция цепочки ипстру ментов), открываемой из пункта меню Project (Проект). Как показано на Рис. 2.4, если при инсталляции был использован компакт-диск, прилагаемый к набору средств проектирования, после выбора фирмы-разработчика Keil определение исполняемого файла программы (Executable) и параметров командной строки (Command line flags) для АССЕМБЛЕРА (Assembler), КОМПИЛЯТОРА (Compiler) п КОМПОНОВЩИКА (1 inker) происходит автоматически. Интегрированная среда разработки полностью поддерживает процесс проек тировапия программ, схема которого показана па Рис. 2.5. На схеме выделены с помощью условных <июпычсннй (см правый верхний угол рисунка) процзам мныс средства процесса и со > иные мыс ими файлы
Глава 2. Средства разработки микроконтроллерных систем на базе МК C8051Fxxx Путь и имя файла программы — Фирма-разработчик ПО Tool Chain Integration Рис. 2.4. Вкладка подключения к среде проектирования АССЕМБЛЕРА, КОМПИЛЯТОРА и КОМПОНОВЩИКА. Язык программирования низкого уровня (ассемблер) Рис. 2.5. Схема проектирования программ микроконтроллерных систем.
2.3. Интегрированная среда разработки С помощью менеджера файлов создается и редактируется файл проекта PrjName.wsp (PrjName — имя файла проекта, расширение wsp от слова workspace — рабочее пространство). С помощью редактора подготавливаются исходные файлы программ на языке ассемблера FilName.asm (FilName — имя исходного файла, расширение asm от сло- ва assembler— ассемблер) или на языке С FilName.с (FilName — имя исходного фаи ла, расширение с указывает на язык С). В первом случае бывает необходимо ис пользовать готовый или создать новый включаемый файл InName.inc (InName имя включаемого файла, расширение inc от слова include — включать), ссылка на который имеется в исходном файле. Во втором случае бывает необходимо исполь зовать файл заголовка HdName.h (HdName — имя файла, расширение h от слова header — заголовок), ссылка на который имеется в исходном файле. Каждый исходный файл на языке ассемблера (совместно с включаемым фай лом, если на него есть ссылка) подвергается ассемблированию с помощью ассем блера А51, в результате чего создаются переместимый объектный файл FilName.obj (FilName — имя исходного файла, расширение obj от слова object — объект) и листинг FilName.lst (FilName — имя исходного файла, расширение 1st от слова listing— листинг). Каждый исходный файл на языке С (совместно с файлом заголовка, если на него есть ссылка) подвергается компиляции с помощью ком- пилятора С51, в результате чего также создаются переместимый объектный файл FilName.obj и листинг FilName.lst. Полученные переместимые объектные файлы нескольких модулей могут быгь скомпонованы с помощью компоновщика BL51 в абсолютный объектный файл PrjName. Состав и параметры размещения модулей, а также сообщения о воз- можных ошибках компоновки выводятся в текстовый файл компоновки PrjName.M51. Наряду с переместимыми объектными модулями компоновщик может скомпоновать вместе с модулями библиотечные файлы LibName.lib (LibName — имя библиотечного файла, расширение lib от слова library — библио- тека). Причем библиотека может быть как стандартная, например библиотека арифметики с плавающей запятой, так и созданная пользователем с помощью библиотекаря LIB51. Готовый абсолютный объектный файл PrjName можно загрузить в память М К и выполнять отладку с помощью встроенного в интегрированную среду отладчика. Встроенный отладчик позволяет вести отладку на уровне исходного языка. В режиме отладки среда проектирования предоставляет разработчику возможность открыть целый ряд дополнительных окон (Рис. 2.6): • окно наблюдения (Watch Window) — для наблюдения значений переменных; • окно регистров (Registers) — позволяющее наблюдать содержимое текущего банка регистров; • окно памяти данных (RAM) — позволяющее наблюдать содержимое ячеек оперативной памяти; • окно памяти программ (Code Memory) — позволяющее наблюдать содержи- мое ячеек памяти программ;
2 Sttcofi Laboratories IDE - [Bfinky-c} JSJ2S1 *^F3e Edit | View Project Debug Tools Options Window Help И4 D & Й Debug Windows SFR's 8051 Controller/Misc * Project Window •f Output Window В____________ 5 p Status Ear ST " Toabars... Watch Window НЕЙ Registers RRHRAM COH Code Memory Ijp Disassembly Comparator 0 Hadi Interrupts Oscillators j w* Workbook Mode PCA z This program f1 // Target C8051F3nTT Ports SMBus Timers // Tool chain KEIX Eval ‘c‘ // Includes ^include <c8051f300 h> // 16—bit SFR Definitions for ' F30x |i] Fite... Bbnky.c И I oia’ | [S] И21 ] ИЯ № КПП CODE j Л iriucts Inc. in the C8051F30x rupt handler for ZZ SFR declаз ИЫ ► IM j\ BuildА Ня Д Tod / AMX0SL = 00 ADCOCN =00 ADC0CF = F8 ADCO =00 ADCOGT = FF ADC0LT =00 Address. J" 0012 0014 0016 0018 001A 001C 001D 0020 0021 74 F5 F5 D2 D2 22 75 E4 F5 FF CD cc AD CA El E2 04 MOV A J MOV CDfc MOV CC1 SETB SETB RET MOV CLR MOV Elb A E21 ( (Target: C8051F300 ^C : 0040 fWafahponte Disabled Halted * [Ln 69, Cd 1 | Puc. 2.6. Окна интегрированной среды проектирования для отладки программ. Глава 2. Средства разработки микроконтроллерных систем на базе МК C8051Fxxx
2.4. Мастер конфигурации Ml • окно дисассемблера (Disassembly) — позволяющее наблюдать результат дисас семблирования загруженной программы; • окна регистров специальных функций, как стандартных для классически!( МК 8051, так и регистров АЦП, ЦАП, компараторов, контроллеров последо вательных интерфейсов, таймеров и т. п. Таким образом, интегрированная среда разработки объединяет все средства проектирования и предоставляет пользователю дружественный графический ни терфейс, позволяющий оптимизировать и ускорить процесс проектирования сис- тем на базе МК. Из меню Tools (Инструменты) интегрированной среды разработки (см Рис. 2.3) можно вызвать и другое важнейшее средство проектирования — мастер конфигурации. 2.4. Мастер конфигурации МК Фирма Silicon Laboratories предлагает разработчикам два варианта мастера конфигурации МК: • Configuration Wizard — первый вариант (разработанный фирмой Cygnal, внос ледствии приобретенной компанией Silicon Laboratories), поддерживающий раиние*семейства МК; • Configuration Wizard 2 — второй вариант, поддерживающий все семейства МК. Оба мастера конфигурации позволяют генерировать код конфигурации как на языке ассемблера, так и на языке С, однако принцип структурного построения программ несколько отличается. Ниже приведено краткое описание двух вариан тов мастера конфигурации и принципов структурного построения программ с их помощью. Интерфейс Configuration Wizard имеет два окна (Рис. 2.7), появляющиеся сра зу после запуска программы и выбора типа МК и языка программирования. Ле- вое окно содержит раскрывающееся по мере надобности дерево опций-флажков (CheckBoxes) для всех периферийных узлов МК, а правое — шаблон (Template) прикладной программы с исходным кодом конфигурации. Последний, если гово- рить о языке ассемблера, представляет собой набор команд пересылки непос родственных данных инициализации в соответствующие регистры специальных функций. Фактически эти непосредственные данные в начале процесса соответс- твуют состоянию регистров после сброса. В процессе конфигурации пользова гель устанавливает нужные флажки в левом окне, а мастер конфигурации пзме пяст в соответствии с выбранными установками указанные выше непосредствен ные данные в правом окне, генерируя тем самым код конфигурации. Более того, некоторые операции конфигурирования, например запрещение сторожевою таймера, вызывают написание дополни тельных строк кода конфигурации. Кроме этою в определенных случаях мастер конфигурации снабжает изменения про граммпого кода необходимыми коммешариями.
Глава 2. Средства разработки микроконтроллерных систем на базе МК C8051Fxxx __ Окно выбора параметров конфигурации Окно генерируемого кода Рис. 2.7. Мастер конфигурации (Configuration Wizard). Схема разработки прикладной программы с использованием мастера конфи- гурации (Configuration Wizard) показана на Рис. 2.8. Первый этап разработки включает открытие файла шаблона программы с помощью мастера конфигура- ции, выполнение конфигурирования и сохранение шаблона с выполненной кон- фигурацией как исходного файла. Второй этап предусматривает создание нового проекта в интегрированной среде разработки, открытие сохраненного файла для редактирования с последующим сохранением отредактированного исходного файла. В процессе редактирования, сразу после директивы включения файла с определениями для выбранного МК SINCLUDE (C8051F020), следует внести первую часть кода программы, содержащую объявления глобальных и локальных переменных, задание констант и сегментов, заканчивая абсолютным сегментом кода, начинающегося с адреса 0000Н (CSEG АТ 0). Вторая часть кода программы, содержащая векторы прерываний, вносится в шаблон после вектора 0, т. е. векто- ра начальной инициализации после сброса. Адресом назначения этого вектора является метка программы конфигурации — Config (см. Рис. 2.8). Третья часть ко- да, вписываемая в шаблон, — это код инициализации главной программы. При- чем первой командой этого кода рекомендуется инициализировать указатель сте- ка SP на начало сегмента стека. И наконец, в последней части программного кода
2.4. Мастер конфигурации МК Мастер конфигурации (Configuration Wizard Шаблон программы Открыть Конфигурировать Сохранить как... Новый/Открыть Редактировать Сохранить Редактор интегрированной среды разработки Код прикладной программы GLOBAL VARIABLES ... ;-- Глобальные/Локальные переменные — $INCLUDE(C8051F020.INC) Константы my_stack my_data |;MAIN PROGRAM CODE |;Initialization Code ;INTERRUPT VECTOR CODE org OOh LJMP Config org 0B3h onfig: ;Код конфигурации Вектора прерываний Главная программа Подпрограммы Таблицы CSEG АТ О Код инициализации — mov sp,#my_stack-l org xxxh LJMP :SRaddress — Сегменты segment rseg ds segment rseg ds idata mystack 10h data my_data —Подпрограммы обработки прерываний - Рис. 2.8. Схема разработки прикладниц программы с использованием маеtера конфигурации (Configuration Wizard)
Глава 2. Средства разработки микроконтроллерных систем на базе МК C8051Fxxx следует вписать код главной подпрограммы, подпрограмм обработки прерываний и, если требуется, таблицы данных (см. Рис. 2.8). После сохранения исходный файл может быть подвергнут трансляции, ком- поновке и отладке. Использование при проектировании мастера конфигурации избавляет разра- ботчика от необходимости отыскания имени нужного регистра специального на- значения и вычисления требуемого кода инициализации, что значительно сокра- щает время разработки программы. Недостатком мастера конфигурации (Configuration Wizard) является избыточ- ность программного кода: если даже не требуется конфигурирование того или иного периферийного узла, соответствующие команды присутствуют в генериру- емом коде. Вторым недостатком является неудобство корректировки конфигура- ции, необходимость в которой, как правило, возникает повторно в процессе от- ладки проекта. Это неудобство связано с тем, что код конфигурации находится в общем файле, открыть который для редактирования мастером конфигурации нет возможности. Поэтому приходится снова открывать шаблон, выбирать другую конфигурацию для того или иного периферийного узла, а затем копировать соот- ветствующие строки и вставлять их в прикладную программу взамен старых строк. И наконец, третьим недостатком является то, что нет возможности внутри тела главной программы вызывать процедуру повторной отдельной инициализа- ции того или иного периферийного узла, в случае, например, обнаружения сбоев в его работе. Все эти недостатки устранены в новом мастере конфигурации — Configuration Wizard 2. Этот мастер конфигурации (Рис. 2.9) формирует код конфигурации как процедуру (подпрограмму) lnit_Device, которую можно вызвать из основной про- граммы. Для возможности последующего редактирования конфигурации код конфигурации помещается в отдельный модуль программного кода, присоединя- емый к другим программным модулям на этапе компоновки. Это дает возмож- ность мастеру конфигурации (Configuration Wizard 2) создавать собственный про- ект (расширение имени файла проекта — cwg), который впоследствии можно от- крыть для редактирования конфигурации, т. е. изменения программного модуля конфигурации. В меню Options (опции) можно выбрать язык программирования: язык ассемблера или С. В меню Peripherals (Периферийные узлы) можно выби- рать по отдельности те узлы, для которых разработчик желает выполнить конфи- гурирование. При выборе узла открывается окно с одной или несколькими вклад- ками, в которых можно установить флажки (CheckBoxes) или переключатели (OptionButtons) в соответствии с желаемой конфигурацией. Из этой же вкладки можно вызвать дополнительные окна для конфигурирования связанных с узлом прерываний (Interrupts) или матричного коммутатора (Crossbar). После нажатия кнопки ОК сформированные подпрограммы инициализации (для каждого пери- ферийного узла отдельно) вносятся в текст исходного модуля конфигурации (см., например, подпрограмму инициализации компаратора Comparator !nit на 1*ис. 2.9), а в теле процедуры lnit_Device появляется соответствующая строка вы- юиа (на языке ассемблера — эго команда вызова подпрограммы, например, на Рис. 2.9 Icall Compar.itorjnit).
Окно генерируемого кода Окно выбора параметров конфигурации □ Ц* й Config! - [Untitled C8051F020 ] File Options Peripherals View Help В S ? Sinclude (C8051F020.inc) public InivDevice Comparator INIT SEGMENT CODE rseg INIT ComparatorO | Comparator! ] Comparator Enable Г” Enable ComparatorO Comparavor_Iniv: iriov CPTOCN, rev #OOAh Iniv_Device: Icall Comparavor_Iniv rev Comparator Hysteresis Positive Hysteresis: f Disabled 2 nW 4 nW С Ю mV Negative Hysteresis: Disabled <• 4 mV end CPTOCN =0xQA; Ready Comparator Interrupts ComparatorO Faling Interrupt is Disabled ComparatorO Rising Interrupt is Disabled Configure CP Interrupts | Comparator on the Crossbar ------ CPO is Disabled on the Crossbar Configure Port I/O | Cancel | Reset Puc. 2.9. Окна мастера конфигурации (Configuration Wizard 2). 2.4. Мастер конфигурации МК
Глава 2. Средства разработки микроконтроллерных систем на базе МК C6051Fxxx Схема разработки прикладной программы с использованием мастера конфи- гурации (Configuration Wizard 2) показана на Рис. 2.10. Первый этап разработки включает генерирование файла конфигурации с помощью мастера конфигурации 2, сохранение его как исходного файла, а также сохранение проекта мастера кон- фигурации на случай последующей коррекции конфигурации. Второй этап пре- дусматривает создание нового проекта в интегрированной среде разработки, с присоединением сохраненного файла конфигурации и, как минимум, создании и присоединении к проекту еще одного исходного файла. Рис. 2.10. Схема р.'вработкн прикладной npoip.iMMi.i с использованием мастера конфи) ураннн (('onUnniatioii Wizard 2).
2.5. Программное обеспечение фирмы Kell В файле конфигурации сразу после директивы включения файла с определе ниями для выбранного МК SINCLUDE (C8051F020) процедура InitDevice обь является общедоступной (public), что позволяет вызывать ее из других модулей. Собственно исходный файл прикладной программы, редактируемый с гюмо шью редактора интегрированной среды разработки, в разделе объявления пере- менных должен определять процедуру Init Device, как внешний код (extrn code), и содержать также директиву включения файла с определениями для выбранною МК SINCLUDE (C8051F020). Перечень рекомендуемых разделов прикладной программы совершенно аналогичен рассмотренному выше (см. Рис. 2.8), с гем лишь исключением, что в разделе «Код инициализации» дополнительно включе на строка вызова внешней подпрограммы инициализации МК — Init_Device. Поскольку эта строка содержит команду вызова подпрограммы, целесообразно перед ее выполнением инициализировать указатель стека (см. Рис. 2.10). После сохранения проекта в составе файла конфигурации и одного или не- скольких исходных модулей он может быть подвергнут трансляции, компоновке и отладке. Мастер конфигурации Configuration Wizard 2 лишен указанных выше нсдо статков, поэтому его применение еще более эффективно. 2.5. Программное обеспечение фирмы Keil Программное обеспечение фирмы Keil, используемое совместно со средствами проектирования фирмы Silicon Laboratories, включает ассемблер А51, компилятор С51. компоновщик BL51, библиотекарь LIB51, вспомогательные утилиты и библи отеки. Ниже приведена краткая информация по использованию основных про- граммных средств. Подробные указания по использованию этих средств можно найти на сайте фирмы www.keil.com, а также в разделе помощи (Help) интегриро ванной среды проектирования фирмы Keil — ^Vision 3, дистрибутив демонстрацп одной версии которой имеется на прилагаемом компакт-диске. 2.5.1. Ассемблер А51 Ассемблер А51 представляет собой макроассемблер со свободным форматом, поддерживающий метод модульного программирования, т. е. генерирующий пе- рсместимый объектный файл. В каждой строке программы можно записать ко манду МК или директиву ассемблера (псевдокоманду). Команда может быть по- мечена символической меткой, а директива может быть снабжена именем. Каждая строка программного кода на языке ассемблера может содержать до четырех полей: поле имени (метки), поле операции, поле операндов и поле ком мептария (Табл. 2.1). Поле имени (метки) отделяется пробелом (в случае имени) или двоеточием (в случае метки). Поле операции отделяется от поля операндов пробелом. Операнды, если их несколько, отделяются друг от друга запятой. Поле комментария должно начинаться со шака точка с запятой.
1лава 2. Средства разработки микроконтроллерных систем на базе МК С8051Fxxx (аблица 2.1. Формат программной строки на языке ассемблера Поле имени (метки) Поле операции Поле аргументов Поле комментария Next: MOV А, В Исполняемая команда МК ;Executable Instruction BIokLength DW 16Н Псевдокоманда ;(Директива ассемблера) ;Pscudo Instruction ;(Assembler Directive) В поле имени (метки) можно записать символическое имя (или метку), кото- рое должно содержать не более 31 символа. Допустимо использовать строчные или прописные буквы латинского алфавита, десятичные цифры, а также знак подчеркивания (_) или вопросительный знак (?). Имя (метка) может начинаться с любого символа, за исключением цифр. В поле операции для команды МК необходимо использовать стандартные мнемоники (аббревиатуры) команд (см. Табл. 1.2), а для директив ассемблера — зарезервированные слова ассемблера. В поле операндов для директив ассемблера используют константы или символь- ные имена. Команда МК в качестве операндов может использовать стандартные имена регистров, символические имена, числовые данные или выражения. Число- вые данные могут быть представлены в шестнадцатеричной, десятичной, восьме- ричной или двоичной системах счисления с использованием соответствующих сим- волов и суффиксов (Табл. 2.2). При этом, если шестнадцатеричное число начинает- ся с символа латинской буквы, его следует дополнить слева незначащим нулем. Ассемблер позволяет также использовать вычисляемые выражения для опе- рандов. Допустимые арифметические операции приведены в Табл. 2.3. Порядок операций стандартный: сначала унарные операции, затем умножение, целочис- ленное деление и остаток и, наконец, сложение и вычитание. Для изменения по- рядка операций используются круглые скобки. Для управления процессом ассемблирования используют директивы ассемб- лера. Ассемблер А51 поддерживает множество директив. Наиболее часто исполь- зуемые важнейшие директивы ассемблера приведены в Табл. 2.4. Все множество директив может быть разделено на ряд категорий. Таблица 2.2. Обозначение чисел Основание Суффикс Разрешенные символы Шестнадцатеричные (Hex) H,h 0...9, A...F, a...f Десятичные (Dec) D, d* 0...9 Восьмеричные (Oct) О, о, Q, q 0...7 Двоичные (Bin) B,b 0, I Десятичные числа могут не иметь суффикса.
2.5. Программное обеспечение фирмы Keil Таблица 2.3. Арифметические операторы выражений (expressions) Оператор Синтаксис Описание + + expression Унарный знак «плюс» Unary plus sign - expression Унарный знак «минус» Unary minus sign + expression + expression Сложение Addition expression - expression Вычитание Subtraction * expression* expression Умножение Multiplication / expression / expression Целочисленное деление Integer division MOD expression MOD expression Остаток (число по модулю) Remainder ( ) (expression) Задание порядка операций Specify order of execution Таблица 2.4. Важнейшие директивы ассемблера Категория Директива Описание Пример Управление сегментами SEGMENT Создание общего сегмента MY SEGMENT DATA RS EG Выбор персместимого сегмента RSEG MY BSEG, DSEG, ISEG, XSEG. CSEG Создание абсолютного сегмента BIT, DATA, IDATA, XDATA, CODE CSEG AT 0 Определение символов EQU SET Назначение цифрового значения символу (Директива SET допускает переопределение) ONE EQU 1 TWO SET 2 BIT, DATA, [DATA, XDATA. CODE Назначение адреса заданному символу CNTDATA40H Инициализа- ции памяти DB, DW, DD Определение байта, слова, двойного слова MES: DB‘ERROR’ Резсрвирова- пис памяти DBIT Резервирование заданного числа битов ERF: DBIT1 DS Резервирование заданного числа байтов CNT: DS 2 Связывание программ PUBLIC Список символов, которые могут быть использованы другими модулями PUBLIC IN MESS EXTRN Список символов, объявленных в других модулях EXTRN OUT_DATA V правдепис тлрссом ORG Изменение счетчика адреса ассемблера ORG 0D3H USING Объявление использования банка регистров USING 0 11рочие END Конец модуля программы END
Глава 2. Средства разработки микроконтроллерных систем на базе МК C8051Fxxx К категории директив управления сегментами относятся директивы создания общего сегмента программы, выбора для размещения соответствующего пере- местимого сегмента и создания абсолютного сегмента. Тип сегмента должен со- ответствовать типу памяти: BIT, DATA, IDATA, XDATA, CODE (см. Рис. 1.2). Директивы определения символов позволяют назначить цифровое значение или адрес соответствующим символам. Директивы инициализации памяти поз- воляют программисту заносить в память константы, таблицы, символьные стро- ки (см. пример в Табл. 2.4). Директивы резервирования памяти позволяют заре- зервировать место в памяти для размещения отдельных переменных (в том числе булевых переменных — битов) или массивов. Для поддержки модульного программирования служат директивы связывания программ PUBLIC и EXTRN, в каждой из которых можно указать список имен. К директивам управления адресом относятся директивы ORG и USING. Пер- вая из них позволяет изменять состояние счетчика адреса ассемблера, т. е. адрес размещения следующих за этой директивой команд. Состояние этого счетчика может использоваться и в вычисляемых адресных выражениях. Для указания со- стояния счетчика адреса ассемблера в выражениях зарезервирован символ долла- ра ( $ ). Вторая директива сообщает ассемблеру и впоследствии — через объект- ный модуль — компоновщику об использовании банка регистров общего назна- чения (операнд директивы — цифра от 0 до 3). Это сообщение оказывает влияние на размещение компоновщиком переместимых сегментов в адресном пространс- тве внутренней памяти данных МК. И наконец, к категории прочих относится важнейшая директива END, кото- рой должен заканчиваться программный модуль. Все, что написано в программе после этой директивы, ассемблером игнорируется. Отсутствие этой директивы в исходном файле вызывает сообщение ассемблера о предупреждении. Ассемблер А51 поддерживает макрокоманды, управляющие структуры и ус- ловное ассемблирование. 2.5.2. Компилятор С51 Компилятор С51 — это оптимизирующий компилятор, поддерживающий стандарт языка С, разработанный Американским национальным институтом стандартизации (ANSI — American National Standards Institute). Он предназначен для генерирования быстрого и компактного кода для МК 8051. Компилятор имеет встроенный препроцессор, который обрабатывает исходный программный код, прежде, чем он будет транслирован в объектный код. Задача препроцессора — за- местить или вставить дополнительные фрагменты в исходный код перед компиля цией. Благодаря препроцессору поддерживаются такие возможности языка, как файлы заголовков (Header Files), макросы (Macros) и условная компиляция (Conditional Compilation). Поскольку компилятор С51 генерирует объектный код для конкретного про цессорного ядра 8051, в язык введены соответствующие расширения стандарта ANSI. Эти расширения включают:
2.5. Программное обеспечение фирмы Kell • области памяти; • типы памяти; • модели памяти; • типы данных; • регистры специальных функций; • указатели; • атрибуты функций. Компилятор поддерживает следующие области памяти: память программ, внутреннюю память данных, внешнюю память данных и память для регистров специальных функций. Можно использовать следующие типы памяти: bdata — только для бит-адресуемых объектов (размещаются в бит-адресусмоп области внутренней памяти данных); code — для констант и функций (размещаются в памяти программ); data — только для переменных (размещаются во внутренней памяти данных в области адресов 00H...7FH); far — для переменных и констант (размещаются во внешней расширенной на мяти — актуально только для МК с объемом внешней памяти более 64 Кбайт; предполагается 24-битный адрес, т. е. доступ с помощью 3-байтного общего указа теля); idata — только для переменных (размещаются во внутренней памяти данных после типа data); pdata — только для переменных (размещаются во внешней памяти данных; предполагается 8-битный адрес внутри одной страницы размером 256 байт); xdata — только для переменных (размещаются во внешней памяти данных; предполагается 16-битный адрес внутри области размером 64 Кбайта). При использовании компилятора можно задать одну из трех моделей памяти МК: малую (Small Model), компактную (Compact Model) и большую (Large Model). Малая модель предполагает размещение всех переменных во внутренней памяти данных МК (тип data), поэтому доступ к ним весьма эффективен но времени, однако, если учесть, что в этой же области памяти размещается еще и стек, а размер ее ограничен объемом 256 байт, она имеет очень ограниченное применение. Компактная модель предполагает размещение всех переменных па одной странице внешней памяти данных МК (тип pdata) и доступ к ним с помощью 8-битных указателей (регистры R0 и R1). Компактная модель менее эффективна во времени, чем малая, однако более эффективна, чем большая модель. Последняя предполагает размещение всех переменных во всем объеме внешней памяти данных размером 64 Кбайта (тип xdata) и доступ к ним с помощью 16-битного указателя данных DPTR. Типы данных, поддерживаемые компилятором С51, приведены в Табл. 2.5. Дополнительные типы данных, не характерные для стандартного ANSI С, виде лены курсивом.
лова 2. Средства разработки микроконтроллерных систем на базе МК С8051Fxxx 1Вблица 2.5. Типы данных, поддерживаемые компилятором С51 Типы данных Бит Байт Диапазон значений Hum (bit) 1 0 или 1 Сим пол со знаком (signed char) 8 I -128...+ 127 Симнол без знака (unsigned char) 8 1 0...255 1крсчислимый тип (Enum) 8 или 16 1 или 2 -128...+127 или -32768...+32767 Короткое число со знаком (signed short) 16 2 -32768...+32767 Короз кое число без знака (unsigned short) 16 2 0...65535 Целое число со знаком (signed int) 16 2 -32768...+32767 Целое число без знака (unsigned int) 16 2 0...65535 Длинное число со знаком (signed long) 32 4 -2147483648...+2147483647 Длинное число без знака (unsigned long) 32 4 0...4294967295 Вещественное число (Float) 32 4 + 1.175494Е-38...±3.402823Е+38 Hum регистра специальных функции (sbit) 1 0 или 1 К-биитый регистр специальных функций (sfr) 8 1 0...255 16-битиый регистр специальных функций (sfr 16) 16 2 0...65535 Присвоение имен регистрам специальных функций обеспечивается путем включения заголовочного файла с определениями с помощью директивы пре- процессора, например: tfinclude “С8051 F020.h”. Компилятор снабжается набо- ром таких файлов, содержащим отдельный файл для каждого семейства МК. Компилятор С51 поддерживает два типа указателей: общий указатель (generic pointer) и указатель определенного типа памяти (memory-specific pointer). Первый run может быть использован как указатель переменной, размещенной в любом месте системы памяти МК. Для хранения первого типа указателя отводятся 3 бай- га памяти: первый байт хранит тип памяти, второй и третий — адрес. Второй тип указателя имеет размер один (для типа памяти idata, data, bdata и pdata) или два байта (для типа памяти code и xdata) и может быть использован только в качестве указателя переменных, размещенных в соответствующем типе памяти. Програм- мист имеет возможность также задать тип памяти для хранения указателя. В дополнение к стандартным возможностям языка С компилятор С51 позво- ляет использовать ряд расширений при декларации функций: • объявить функцию как подпрограмму обработки прерывания; • выбрать определенный банк регистров для функции; • выбрать модель памяти; • декларировать реентрантную функцию. Компилятор С51 сгенерирует более эффективный код, если следовать следу- ющим рекомендациям [I]: 1. По возможности нужно использовать малую модель памяти, тогда у компи- лятора отпадает необходимость в использовании неэффективной команды MOVX. 2. Если использована большая модель, следует тщательно продумать, какие переменные следует поместить в тип нам пн data. Надо выбрать такие, обраще- ние к которым производится наиболее часто.
2.5. Программное обеспечение фирмы Keil 3. Следует организовать последовательность операторов таким образом, что бы заканчивать работу с одной из переменных, прежде чем начнется работа со следующей. 4. Некоторое значение имеют и второстепенные факторы. Например, при ис- пользовании оператора цикла for() при возрастании индекса компилятор испол! зует команду CJNE, которая менее эффективна, чем команда DJNZ, которую ис пользует компилятор при убывании индекса. Следовательно, для получения более оптимального кода нужно предпочесть цикл с декрементом счетчика цикла. 5. Предпочтительнее использовать операторы сдвига влево или вправо вместо умножения или деления на 2. 6. Маскирование с помощью логического оператора AND (&) гораздо более эффективно, чем вычисление оператора MOD (%). 7. Следует тщательно выбирать размер массивов; желательно, чтобы он соот ветствовал двоичной системе счисления, в которой работает процессор. Если раз мер массива 256 байт, то для хранения индекса достаточно одного байта. Если, например, размер циклического буфера данных 8, 16, 32, 64 или 128 байт, то за цикливание адреса можно выполнить с помощью простого маскирования. 8. Для наиболее критичных участков программ следует использовать фраг менты на языке ассемблера. Несмотря на то что резульгат компиляции программ на языке С безусловно проигрывает в эффективности коду, который может быть получен при использо- вании языка ассемблера, компилятор С51 является незаменимым инструментом при проектировании программ, содержащих сложные математические вычисле ния, особенно при обработке вещественных чисел, где он позволяет в десятки раз сократить время проектирования. 2.5.3. Компоновщик BL51 Компоновщик BL51 предназначен для компоновки переместимых объектных модулей, сгенерированных ассемблером А51 и/или компилятором С51 в единый абсолютный объектный модуль. При этом он может использовать необходимые модули из библиотек. В процессе компоновки BL51 объединяет одноименные сегменты программы в единые сегменты, а также определяет расположение каж- дого из сегментов в системе памяти МК. Кроме абсолютного объектного модуля, компоновщик BL51 может генериро вать файл листинга компоновщика (файл компоновки), в который включаю гея следующие данные: • командная строка вызова компоновщика со всеми параметрами; • список файлов входных модулей; • таблица распределения памяти по типам и сегментам; • таблица символов с указанием значения, типа и имени символов; • сообщения об ошибках компоновки, если гаковые имеются. Выбор фаплов для компоновки при использовании интегрированной среды проектирования Silicon Laboratories IDL можно осуществить с помощью окон
Глава 2. Средства разработки микроконтроллерных систем на базе МК C8051Fxxx диалога, открывающихся после выбора опции Target Build Configuration (Конфи- гурация компоновки проекта) в разделе Project (Проект) главного меню среды прое ктирован ия. 2.5.4. Библиотекарь LIB51 Библиотекарь LIB51 - это программа, позволяющая создавать и поддержи- вать библиотечные файлы для МК с системой команд 8051. Библиотечный файл представляет собой отформатированный набор объектных файлов. Библиотеч- ный файл обеспечивает удобный способ ссылок на большое количество объект- ных файлов и используется компоновщиком. Библиотекарь может управляться с помощью командной строки или в интерактивном режиме. Перечень команд, выполняемых библиотекарем LIB51, приведен в Табл. 2.6. Для запуска команды достаточно указать лишь одну букву (см. подчеркнутые буквы в Табл. 2.6). Если при выполнении операций библиотекарь обнаруживает ошибки, он выводит со- ответствующие сообщения. Вызов программы LIB51 при использовании интегрированной среды проек- тирования Silicon Laboratories IDE можно осуществить с помощью вновь создан- ной опции раздела Tools (Инструменты), предварительно воспользовавшись для ее создания опцией Add/Remove User Tool (Добавить/удалить инструмент пользо- вателя) и выбрав имя нового инструмента, например Library Manager, и имя ис- полняемого файла LIB5l.EXE. В качестве другой возможности вызова библиоте- каря можно подготовить пакетный файл для построения проекта, содержащий соответствующую команду, и включить его в процесс с помощью диалога опции Target Build Configuration (Конфигурация компоновки проекта) в разделе Project (Проект) главного меню среды проектирования. Таблица 2.6. Команды программы-библиотекаря LIB51 Команда Описание ADD Добавить объектный модуль в библиотечный файл Пример: ADD GOODCODE.OBJ ТО MYLIB.LIB CREATE Открыть новый библиотечный файл Пример: CREATE MYLIB.LIB DELETE Удалить объектный модуль из библиотечного файла Пример: DELETE MYLIB.LIB (GOODCODE) EXIT Выйти из интерактивного режима EXTRACT Извлечь объектный модуль из библиотечного файла Пример: EXTRACT MYLIB.LIB (GOODCODE)ТОGOOD.OBJ HELP Отобразить справочную информацию LIST Создать листинг со списком модулей и общих символов библиотечного файла Пример: LIST MYLIB.LIBТО MYLIB.LST PUBLICS REPLACE Заменить объектный модуль в библиотечном файле (если модуль не существует, то он создается) Пример: REPLACE GOODCODE.OBJ IN MYLIB.LIB TRANSEER Преобразовать существующий библиотечный файл в новую библиотеку в составе указанных модулей (удаляетсуществующий библиотечный файл, создает его вновь и включает в него указанные обьекгпыс модули) Пример: TRANSEER I II I I.OB.I. I ll I .’.ОШ IO MYI IB.I IB
Проектирование аппаратных и программных средств Проектирование аппаратных и программных средств при создании «системы на кристалле» на базе МК тесно связаны между собой, М К по сути дела представ ляет собой универсальную ЭВМ с гарвардской архитектурой (т. е. с раздельной па мятью команд и данных) с проблемно-ориентированным специализированным интерфейсом. Следовательно, в любой такой системе всегда присутствует часть программы, обслуживающая этот интерфейс. Если использовать терминологию больших ЭВМ, то эту часть можно назвать драйверами. В простейших микросис- темах она может составлять до 100% от объема прикладной программы, в слож- ных, включающих, например, операционную систему реального времени и слож- ную математическую обработку, — до 15...20%. Именно совместное проектиров) ние аппаратного интерфейса и программ его обслуживания часто является наиболее сложной и критичной частью всего проекта. Поэтому кодирование про грамм обслуживания интерфейса целесообразно выполнять с использованием языка ассемблера, тем более что процессор 8051 относится к классу процессоров с комплексной системой команд (CISC — Complex Instruction Set Computer) и уро вень языка ассемблера в данном случае относительно «высок». Во всяком случае, такой мощный макроассемблер, как А51, позволяет создавать хорошо читаемые и сопровождаемые программы. Поэтому в этой книге основное внимание уделено именно этой части программного обеспечения, и лучший способ изучения при смов программирования — это рассмотрение простейших «прозрачных» приме ров. Сложная программа практически всегда строится как иерархическая структу- ра и компилируется из элементарных фрагментов. Все примеры иллюстрируются кодами на языке ассемблера и оформлены как микропроекты: для каждого приме ра лается два файла (файл конфигурации, полученный с помощью мастера конфи |урапии Configuration Wizard 2 и файл программы), которые можно добавить к । руине исходных файлов вновь созданного проекта для MKC8051F020c помощью Шпсгрироваипои среды проектирования и протестировать. Для этой цели на при латаемом компакт-диске кроме дистрибутива демо-версии интегрированной сре- ды проектирования р Vision 3 размещены исходные коды всех программ, описан пых в книге (каждый мпкропроскт находится в отдельной папке).
Глава 3. Проектирование аппаратных и программных средств 3.1. Особенности системы команд и приемы программирования Разработчик, работающий на уровне языка ассемблера, должен четко пред- ставлять себе логическую организацию МК (см. Рис. 1.2) и хорошо знать особен- ности системы команд МК (см. п. 1.1.4 и Табл. 1.2). Последовательность разра- ботки исходного кода программы традиционно включает три этапа: анализ зада- чи, разработка алгоритма и кодирование. На первых двух этапах целесообразно использовать графический язык как более информативный. Поэтому в книге принято представлять графически, в виде прямоугольников, логические компо- ненты процессора и памяти при анализе задачи, а для представления алгоритмов используется метод графических схем алгоритмов (flowchart). Первые четыре задачи связаны с программированием ветвлений и реализаци- ей типовых алгоритмических структур: следование, ветвление и цикл. Задача 1. Написать программу, выполняющую функцию программного тай- мера: время отсчета — 100 мс, флаг таймера, устанавливаемый по окончании от- счета, — F0 (флаг пользователя из регистра PSW, см Рис. 1.3). Анализ задачи приведен на Рис. 3.1,а. Память данных МК изображена в виде ленты, а ячейки - в виде прямоугольников. Для задач реального времени, какой является задача построения программного таймера, существенными параметра- ми являются частота синхронизации работы процессора и время выполнения ко- манд в циклах частоты синхронизации (см. Табл. 1.2). По умолчанию МК работа- ет от внутреннего генератора с частотой 2 МГц (см. значение после сброса регист- ра OSCICN, Рис. 1.16). С учетом длительности периода этой частоты 0.5 мкс для заданного времени потребуется 200 000 циклов. Это означает, что требуемый раз- мер таймера — 2 байта. Эти байты с именами TMRL (младший) и TMRH (стар- ший) можно разместить, например, по абсолютному адресу ЗОН, как это показа- но па Рис. 3.1. Флаг таймера F0 находится в бит-адресуемом регистре PSW, поэто- му его имя является стандартным и определено во включаемом файле с определениями (см. Приложение 1). Граф-схема алгоритма для программного таймера показана на Рис. 3.1,6. Алго- ритм включает блок инициализации (1), цикл отсчета и операцию установки флага таймера (4). Если выбрать вычитание как направление отсчета таймера, то цикл от- счета можно построить как цикл декремента до 0 старшего байта TMRH (3) с вло- женным в пего циклом декремента младшего байта TMRL (2). Операция декремен- та байта и операция проверки результата на равенство 0 выполняются МК с помо- щью одной команды DJNZ (см. Табл. 1.2). Поскольку байты таймера размещены во внутренней памяти данных (см. Рис. 3.1,а), то речь идете команде DJNZ direct, rel. ^Для этой команды в колонке количества циклов Табл. 1.2 указано время выполне- ния 3/4 цикла. Это означает: 3 цикла, если нет перехода (т. е. результат декремента равен 0), и 4 цикла, если есть переход (т. е. результат декремента не равен 0). Конфигурирование МК для решения данной задачи сводится к запрещению сторожевого таймера, так как по умолчанию он разрешен сразу после сброса. Для выполнения конфигурирования необходимо с помощью пункта меню Tools ни-
3.1. Особенности системы команд и приемы программирован Процессор Внутренняя память данных а) б) Рис. 3.1. Программный таймер: а) анализ задачи; б) граф-схема алгоритма. тсгрированной среды проектирования открыть мастер конфигурации (Configuration Wizard 2) и выбрать для нового проекта МК C8051F020. Затем и ме- ню Options — Code Format мастера конфигурации выбрать язык ассемблера: Asin. В раскрывающемся меню Peripherals мастера конфигурации следует выбрать он пню конфигурации источников сброса Reset Sources, после чего в открывшемся окис Reset Sources выбрать вкладку сторожевого таймера Watchdog Timer. I la non вкладке надо установить флажок запрещения сторожевого таймера Disable Watchdog Timer, как это показано па Рис. 3.2,а. После нажатия кнопки ОК в окне мастера конфигурации можно видеть сгенерированный кол файла конфигурации (Гис. 3.2,6). И) рисунка видно, что мастер конфигурации сформировал подпро |рамму копфпгур Hinn источников сброса Reset Sources Inil (в данном копкрсг
Глава 3. Проектирование аппаратных и программных средств Reset Sources Reset Sources Watchdog Timer j Disable Watchdog Timer I? Disable Watchdog Timer Watchdog Timer Lockout Г Watchdog Timer Interval S et T i rneout I nter vat to: j | rns SYSCLK Frequency Hz Change Clock Frequency WDTCN = 0xDE, WDTCN = OxAD; OK I Cancel j Reset a) Сгенерированная подпрограмма конфигурации источников сброса Вставлена команда вызова сгенерированной подпрограммы Л/i J.2. Программный таймер: конфигурирование МК: а) окно источников сброса; б) исходным файл конфигуртпи.
3.1. Особенности системы команд и приемы программирования ном случае в тело подпрограммы включены две команды запрещения сторожево- го таймера (см. п. 1.5.2 на стр. 44), а в тело главной процедуры конфигурации Init_Device включил команду вызова этой подпрограммы конфигурации источ- ников сброса Icall Reset_Sources_Init. Таким образом, мастер конфигурации авто- матически создает исходный файл конфигурации, а программисту остается лишь сохранить этот файл на диске компьютера. Сохранение дополнительно к этому файла проекта мастера конфигурации позволит впоследствии вносить изменения в конфигурацию МК, не повторяя ранее выполненные операции, что очень важ- но для сложных проектов. Указанная выше конфигурация (см. Рис. 3.2,6) сохра- нена под именем Soft_TMR_conf. Исходный код самой программы, сохраненной под именем Soft_TMR, приве- ден ниже. Для построения кода использован шаблон, показанный на Рис. 2.10 (см. также п. 2.4 на стр. 121). ; Задача 1: Программный таймер ; Soft_.TMR.ASM t Глобальные/локальные переменные SINCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init Device) Константы FRQ equ 2000 ,-Частота, кГц TIME equ 100 ,-Время задержки, мс fMRHIV equ (TIME*(FRQ/4)+256)/256 ;TMRH Начальное значение THRLIV equ (TIME*(FRQ/4)+256)-256*TMRHIV;TMRL Начальное значение L Сегменты tty_stack segment idata rseg my_stack ds 10h HI ds eg at 30h M(RL: ds 1 |he>H: ds 1 fl' cseg at 0 f I org 00h ; Вектор сброса LJMP Config org 0B3h ; Конец области прерываний Ь - "*- < . , и ми <111 ,Л,«, . 1* л 1111 ----------- Код инициализации -------------------------
Глава 3. Проектирование аппаратных и программных средств Config: H1OV sp,#my_stack-l Icall Init_Device clr F0 mov TMRH,#TMRHIV mov TMRL,#TMRLIV ; Инициализация стека ; Вызов подпрограммы конфигурации ; 1.Инициализация Главная программа- decrl: djnz TMRL,$ ; 2.Декремент TMRL djnz TMRH,decrl ; 3.Декремент TMRH setb FO ; 4.Установить флаг таймера (FO) sjmp $ END В разделе «Константы» определены заданная частота FRQ и время задержки TIME, а также даны выражения для вычисления с помощью ассемблера началь- ных значений (initial value) для байтов таймера: TMRHIV и TMRLIV. Эти выраже- ния учитывают структуру алгоритма (Рис. 3.1,6) и длительность выполнения ко- манды DJNZ direct, rel для случая перехода (4 цикла). В разделе «Сегменты» определен переместимый сегмент стека my_stack, в ко- тором зарезервировано 16 байт, абсолютный сегмент данных, начиная с адреса ЗОН, в котором зарезервированы две переменные: TMRL и TMRH, каждая разме- ром в 1 байт, и абсолютный сегмент кода основной программы, начинающийся с адреса 0. В разделе «Векторы прерываний» размешен только вектор сброса, передаю- щий управление на метку Config, а также директива ассемблера, предписываю- щая размещение дальнейшей программы за пределами зоны, отведенной для век- торов прерываний (см. Табл. 1.4). Раздел «Код инициализации» содержит стандартную часть и блок инициали- зации проектируемой программы. Стандартная часть включает в себя команду инициализации указателя стека (начальный адрес выбирается на 1 меньше, так как любая команда, загружающая стек, перед записью производит инкремент указателя стека) и команду вызова подпрограммы Init Device из файла конфигу- рации. Блок инициализации для проектируемой программы включает команды очистки флага F0 и команды загрузки начальных значений TMRHIV и TMRLIV в ячейки таймера. В разделе «Главная программа» размещены цикл отсчета времени, помечен- ный меткой decrl и включающий две команды DJNZ, и команда установки флага F0 согласно алгоритму Рис. 3.1,6. Для останова процессора по завершении про- цесса можно использовать бесконечный цикл, создаваемыфкомандой sjmp $ (знак $ обозначает здесь счетчик адреса ассемблера). Псевдокоманда ассемблера END отмечает конец исходного файла. Нетрудно видеть, что с помощью этой простейшей программы прослеживает- ся весь процесс подготовки исходных кодов прикладных программ МК, включая проблему реального времени.
3.1. Особенности системы команд и приемы программировании Задача 2. Написать программу, выполняющую «шахматный» тест 80Н ячеек внутренней памяти данных, начиная с адреса 80Н. В случае нахождения ошибки записи/чтения программа должна прерывать тестирование и устанавливать флаг Fl (флаг пользователя из регистра PSW, см. Рис. 1.3). «Шахматный» тест предусматривает запись в тестируемую ячейку памяти ко- да, где единицы чередуются с нулями. Если говорить о ячейках размером 1 байт, то это коды 55Н и ААН. Если чтение ячейки возвращает записанный код, то мож но считать, что ячейка исправна, в ней нет межразрядных замыканий. Если про- верка выполнена для обоих кодов, то можно утверждать, что каждый бит выпол няет корректно операции записи, хранения и считывания бита. Графический анализ задачи представлен на Рис. 3.3,а. Во внутренней памяти данных, начиная с адреса 80Н, находится массив из 80Н проверяемых ячеек. До- ступ к элементам этого массива можно выполнить с помощью указателя на ociio- а) Puc. 3..1. Гест вами ги л) липли i гллачи, 6) ip.wji схема и ииритма.
Глава 3. Проектирование аппаратных и программных средств ве регистра общего назначения R0. В качестве счетчика цикла можно использо- вать ячейку памяти Count с адресом ЗОН. И наконец, результат теста отображает- ся состоянием флага пользователя F1. Граф-схема алгоритма тестирования памяти приведена на Рис. 3.3,6. Схема содержит блок инициализации (1) и цикл тестирования, включающий операции записи кодов в ячейки (2 и 4) и проверки считыванием (3 и 5). В завершающей части цикла производится инкремент указателя (6) и проверка условия конца тес- та (7). В случаях некорректного считывания устанавливается флаг ошибки (8) и тестирование прерывается. Для кодирования проверки конца цикла, как и в пре- дыдущей программе, удобно использовать комплексную команду DJNZ. А для контроля корректности считывания — другую комплексную команду CJNE (см. Табл. 1.2), выполняющую функцию сравнения и перехода в случае неравенства операндов. Кроме того, на схеме алгоритма для удобства последующего кодиро- вания в точках ветвления указаны символические метки. Конфигурирование МК выполнено аналогично задаче 1, и код конфигура- ции сохранен в файле Mem Test conf. Исходный код самой программы, сохраненной под именем Mem_Test, приве- ден ниже. Он построен аналогично задаче 1. ; Задача 2: Тест памяти ;Mem_Test.ASM ;--------------- Глобальные/локальные переменные ---- SINCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) Start_ADR Nmbr_Cells equ equ 80h 80h Константы / — - Сегменты my_stack segment idata rseg my_stack ds lOh dseg at 30h Count: ds 1 cseg at 0 ---------- Векторы прерываний ---------— org 0Oh ; Вектор сброса LJMP Config org 0B3h I Конец области прерываний
3.1. Особенности системы команд и приемы программирования ; КОд инициализации Config: mov Icall sp,#my_stack-l Init_Device ; Инициализация стека ; Вызов подпрограммы конфигурации mov rO,#Start_ADR ; 1.Инициализация mov Count,#Nmbr_CeIls clr Fl Главная программа' next: mov @r0,#55h ; 2.Записать в ячейку число #55h cjne @r0,#55h,err ; 3.Ячейка = 55h? mov @r0,#0AAh ; 4.Записать в ячейку число #0AAh cjne @r0,#0AAh,err ; 5.Ячейка = AAh? inc rO ; 6.Инкремент указателя djnz Count,next ; 7.Конец теста? sjmp exit err: setb Fl ; 8.Установить флаг ошибки (F1) exit: sjmp $ END В разделе «Константы» определены два символических имени: стартовый ад- рес Start_ADR и количество ячеек Nmbr Cells. В разделе «Сегменты» также определен переместимый сегмент стека my_stack и абсолютный сегмент данных, начиная с адреса ЗОН, в котором зарезервирован один байт для счетчика цикла Count. Блок инициализации для проектируемой программы в разделе «Код инициа- лизации» включает команды загрузки начальных значений в регистр-указатель и счетчик цикла, а также команду очистки флага Fl. В разделе «Главная программа» закодирован цикл тестирования. Текст исход- ного кода снабжен комментариями с указанием номера блока и метками в соот- ветствии со схемой алгоритма Рис. 3.3,6. Недостатком такого теста является то, что он является «разрушающим», т. е. после теста теряется содержимое проверяемой зоны памяти. Однако совершенно очевидно, что с использованием одной дополнительной ячейки или регистра можно построить тест, который сохраняет перед проверкой каждой ячейки ее со- держимое и возвращает его после проверки. Автор предоставляет здесь читателю возможность самостоятельно построить алгоритм и закодировать подобный тест н качестве упражнения. Задача 3. Написать подпрограмму для нахождения максимального байта в массиве байтов (каждый байт — число без знака), размещенном во внутренней памяти данных. Входные параметры (address — адрес и size — размер массива) пе- релаются через регистры R0 и Rl, выходной параметр (max — максимальный эле- мент массива) передается через ячейку внутренней памяти данных с адресом ЗОН. Графический анализ задачи представлен на Рис. 3.4,а. Во внутренней памяти данных МК, начиная с адреса address, размещается массив байтов размером size, а
Глава 3. Проектирование аппаратных и программных средств и ячейке с абсолютным адресом ЗОН — выходная переменная max. Регистры про- цессора несут следующую функциональную нагрузку: R0 — указатель элементов массива, R1 — счетчик цикла, а аккумулятор А — рабочий регистр. ( Find MAx) -1 I max = 0 max = byte а) Рис. 3.4. Поиск максимального элемента в массиве: а) анализ задачи: б) граф-схема алгоритма. Граф-схема алгоритма поиска максимального элемента в массиве представле- на на Рис. 3.4,6. Алгоритм имеет циклическую структуру. Поскольку по условиям задачи все параметры подпрограмма получает в готовом виде через соответствую- щие регистры, в блоке инициализации цикла (1) необходимо лишь присвоить минимальное нулевое значение переменной max. Внутри тела цикла необходимо прочитать очередной элемент массива (2) и проверить: если элемент больше max (3), то присвоить переменной max значение нового элемента (4), в противном случае оставить переменную max без изменения (переход от бл^а 3 к блоку 5). В конце цикл содержит операцию инкремента адреса address (5) и проверку условия конца цикла (6). Конфигурирование МК выполнено аналогично 1алаче 1, и код конфигура- ции сохранен в файле Find_MAX_conl. Исходный код самой программы, сохраненной под именем Find_MAX, при- веден ниже.
3.1. Особенности системы команд и приемы программирования ; Задача 3: Поиск максимального элемента в массиве ;Find_MAX.ASM .--------------- Глобальные/локальные переменные ---- $INCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) / Константы address equ RO size equ R1 / my_stack segment Сегменты idata rseg my_stack ds lOh max: dseg at 30h ds 1 cseg at 0 — t org OOh ; Вектор сброса LJMP Config org 0B3h ; Конец области прерываний ! Config: mov Icall sp,#my_stack-l ; Инициализация стека Init_Device ; Вызов подпрограммы конфигурации Главная программа Icall Find_MAX sjmp $ Find_MAX: mov max,#0 ; l.max = 0 NEXT: mov a,@address ; 2.Переслать очередной byte в A cjne a,max,check ; 3.A < or = max? sjmp increm check: jc increm mov max,a ; 4.max = byte increm: inc address ; 5.Инкремент address djnz size,NEXT 6.Конец цикла? ret KND
Глава 3. Проектирование аппаратных и программных средств Он построен аналогично коду к задаче 1. В разделе «Константы» с помощью директивы ассемблера equ присвоены специальные имена — address и size — ре- гистрам R0 и R1. Поскольку в этой задаче требуется написать подпрограмму, в раздел «Главная программа» включен только вызов подпрограммы Find_MAX и бесконечный цикл для останова выполнения программы. Собственно програм- мный код подпрограммы FindMAX приведен в разделе «Подпрограммы». Этот код начинается с метки подпрограммы FindMAX и заканчивается командой воз- врата из подпрограммы ret. Поскольку в системе команд отсутствует команда простого сравнения, блок сравнения и ветвления 3 требует трех команд: первая — cjne a,max,check — обеспечивает сравнение и переход к проверке состояния фла- га переноса С; вторая — sjmp increm — реализует переход в случае равенства опе- рандов и, наконец, третья — jc increm — реализует переход, если первый операнд меньше второго (есть заем при операции вычитания, выполненной первой ко- мандой, который сохраняется во флаге переноса). Подробные комментарии пол- ностью соответствуют граф-схеме алгоритма Рис. 3.4,6. Совершенно аналогично можно построить подпрограмму для поиска мини- мального элемента массива, что читатель без труда может сделать самостоятель- но. Несколько более сложной является следующая задача. Задача 4. Написать подпрограмму для подсчета числа копий заданного эле- мента в массиве байтов, размещенном во внутренней памяти данных. Входные параметры — address — адрес и size — размер массива — передаются через регист- ры R0 и R1, входной параметр given — заданный элемент — передается через ячей- ку внутренней памяти данных с адресом 40Н, выходной параметр count — число копий — передается через регистр R7. Графический анализ задачи представлен на Рис. 3.5,а. Во внутренней памяти данных МК, начиная с адреса address, размещается массив байтов размером size, а в ячейке с абсолютным адресом 40Н — заданное число given. Регистры процессора несут следующую функциональную нагрузку: R0 - указатель элементов массива, R1 — счетчик цикла, R7 — счетчик копий заданного элемента, а аккумулятор А — рабочий регистр. Граф-схема алгоритма подсчета количества заданных элементов в массиве представлена на Рис. 3.5,6. Алгоритм имеет циклическую структуру, аналогичную структуре алгоритма для задачи 3. Поскольку по условиям задачи все параметры подпрограмма получает в готовом виде через соответствующие регистры, в блоке инициализации цикла (1) необходимо лишь обнулить переменную count — коли- чество копий заданного элемента. Внутри тела цикла необходимо прочитать оче- редной элемент массива (2), и если элемент равен заданному элементу given (3), то инкрементировать переменную count (4), в противном случае оставить пере- менную count без изменения (переход от блока 3 к блокуф. В конце цикл содер- жит операцию инкремента адреса address (5) и проверку условия конца цикла (6). Конфигурирование МК выполнено аналогично задаче 1, и код конфигурации сохранен в файле Count GIV conf. Исходный код самой программы, сохраненной под именем Count GIV, при веден ниже.
3 1. Особенности системы команд и приемы программирован! а) Puc. 3.5. Подсчет количества заданных элементов в массиве: а) анализ задачи; б) граф-схема алгоритма. Задача 4: Подсчет количества заданных элементов в массиве ;Count_GIV.ASM ;--------------- Глобальные/локальные переменные ----------------- SINCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) ;------------------------Константы-------------------------------- address equ RO size equ R1 count equ R7
Глава 3. Проектирование аппаратных и программных средств 1 - Сегменты iny_stack segment idata rseg my_stack ds ICh dseg at 40h given: ds 1 cseg at 0 Векторы прерываний org LJMP 00h Config ; Вектор сброса org 0B3h ; Конец области прерываний ;---------------------Код инициализации--------------------------- Config: mov sp,#my_stack-l ; Инициализация стека Icall Init_Device ; Вызов подпрограммы конфигурации .--------------------- Главная программа ------------------------ Icall Count_GIV sjmp $ Count_GIV: NEXT: increm: mov mov cjne inc inc djnz ret count,#0 ;1.count = 0 a,@address ;2.Переслать очередной byte в A a,given,increm ;3.A = given? count ;4.Инкремент count address ;5.Инкремент address size,NEXT ;6.Конец цикла? END Он построен аналогично коду к задаче 3. Подробные комментарии полностью соответствуют граф-схеме алгоритма Рис. 3.5,6 и позволяют понять, какие ко- манды используются для кодирования блоков алгоритма. После освоения вышерассмотренных простейших примеров можно перейти к рассмотрению более сложных задач, связанных с доступом к внешней памяти данных и константам, размещенным в памяти программ. Задача 5. Написать подпрограмму для пересылки массива байтов, размещен- ного во внутренней памяти данных, во внешнюю намять данных. Входные пара- метры i_address — адрес массива-источника, х address адрес массива-приемника н size — размер массива — передаются мере j pci поры RO, DPTR и Rl. Графический анализ задачи представлен па Рис. 3.6,в. Во внутренней памяти чанных МК размещен массив байтов paiMcpoM size. Во внешней памяти данных
3.1. Особенности системы команд и приемы программирования а) Рис. 3.6. Пересылка массива байтов: а) анализ задачи; б) граф-схема алгоритма. б) МК имеется свободная зона также размером size, в которую следует переслать массив байтов из внутренней памяти данных. Для адресации элементов массивов используется косвенная адресация: указателем массива-источника служит ре гистр R0, в котором находится адрес внутренней памяти данных i address; указа телем массива-приемника - 16-битный регистр DPTR, в котором находится ад- рес внешней памяти x address. Размер массива size находится в регистре R1, ко го рый можно использовать как счетчик цикла при пересылке элементов массива. Поскольку прямой команды пересылки байта из внутренней памяти во внешнюю нет в системе команд МК, а команды обращения к внешней памяти данных одно адресные, в качестве места промежуточного сохранения пересылаемого байга byte следует выбрать аккумулятор А. Граф-схема алгоритма пересылки массива байтов представлена на Рис. 3.6,6. Алгоритм также имеет циклическую структуру. Поскольку по условиям задачи все параметры подпрограмма получает в готовом виде через соответствующие регис- тры, блок инициализации цикла отсутствует. Внутри тела цикла необходимо пе- реслать очередной элемент массива из косвенно адресуемой внутренней памяти данных IRAM в А (1), затем переслать этот элемент из А во внешнюю память дай ныхХКАМ (2), после чею инкрементировать указатели (3,4) н, наконец, выпол- нить проверку условия конца цикла (5).
Глава 3. Проектирование аппаратных и программных средств Конфигурирование МК выполнено аналогично задаче 1, и код конфигурации сохранен в файле MOV_array_conf. Исходный код самой программы, сохраненной под именем MOV_array, при- веден ниже. Он построен аналогично коду к задаче 3. Задача 5: Пересылка массива байтов ;MOV_array.ASM .---------------- Глобальные/локальные переменные --- $INCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) ;------------------------ Константы ----------------- i_address equ RO size equ R1 r my_stack segment Сегменты idata rseg ds rny_stack lOh iseg at 4 Oh ds 8 xseg at OOh ds 8 cseg at 0 r org 00h ; Вектор сброса LJMP Config org 0B3h ; Конец области прерываний ;--------------------- Код инициализации ------------------------- Config: mov sp,#my_stack-l ; Инициализация стека Icall Init_Device ; Вызов подпрограммы конфигурации .---------------------Главная программа---------**---------------- mov i_address,#40h mov DPTR,#0Oh mov size,#8 Icall MOV_array sjmp $
3.1. Особенности системы команд и приемы программировани Подпрограммы MOV_array: NEXT: mov a,@i_address ; 1.Переслать byte из IRAN в А movx @DPTR,a ; 2.Переслать byte из А в XRAM inc i_address ; 3.Инкремент i_address inc DPTR ; 4.Инкремент x_address djnz size,NEXT ; 5.Конец цикла? ret END Предполагается, что размер массива — 8 байт, что массив-источник находится по абсолютному адресу 40Н во внутренней памяти данных, а массив-приемник — по адресу 0000Н во внешней памяти данных (см. раздел «Сегменты»). В разделе «Главная программа» указана команда вызова подпрограммы пересылки массива, перед которой записана последовательность команд передачи параметров. Собе твенно код решения задачи представлен в разделе «Подпрограммы». Подробные комментарии полностью соответствуют граф-схеме алгоритма Рис. 3.6,6 и позво- ляют понять, какие команды используются для кодирования блоков алгоритма. Задача 6. Написать подпрограмму для преобразования десятичной цифры в коде “Unpacked BCD” в 7-битный код Хемминга с коррекцией одиночных опт бок. Входной параметр BCD digit и выходной параметр Hamming передаются че рез аккумулятор А. Структура неупакованного двоично-десятичного кода “Unpacked BCD” пред ставлена на Рис. 3.7,а. Код представляет собой байт, старшая половина которого содержит нули, а младшая - двоичный код десятичной цифры. Основные принципы построения кодов с коррекцией одиночной ошибки бы ли предложены Р. Хеммингом в 1950 г. в статье [2]. Для построения кода Хемминга с коррекцией одиночных ошибок, содержа щего четыре бита данных: D(, D2, D3, D4, необходимо ввести дополнительно три контрольных бита: Рь Р2, Р3, при этом размер кода возрастает до 7 бит. Вычислс ние значений контрольных битов производится путем суммирования по модулю два по формулам: Р1= D2 Ф D3 Ф D4; P2=D(®D3®D4; (3.1) P3=D!®D2®D4. Структура 7-битного кода Хемминга имеет следующий вид: Номер позиции: 1 2 3 4 5 6 7 Код: Р3 Р2 D1 Р( D2 D3 D4 Проверка корректности 7-битного кода Хемминга производится путем вы числения значении ipex не твнеимых проверок Сь С2, С3 также с использовани ем операции суммирования по модулю два:
Глава 3. Проектирование аппаратных и программных средств С| — Р] Ф Dj Ф D3 Ф D4; С2 = Р2Ф Di® D3® D4; (3.2) С3 = Р3 Ф D1 Ф D2 Ф D4. Если результат проверки С(С2С3 = 0, то это означает, что код ошибки не со- держит, в противном случае код С[С2С3 представляет собой номер позиции, в ко- торой произошла ошибка. Коррекция в этом случае сводится к инвертированию бита в этой позиции. Задача 6 относится к этапу кодирования: даны четыре бита данных, необходи- мо сформировать 7-битный код Хемминга. Система команд МК позволяет про- изводить операции над битами, однако в данном случае значительно проще пост- роить заданную подпрограмму на базе алгоритма просмотра таблиц (Look up Table). С учетом формул (3.1) можно построить таблицу преобразования, приве- денную на Рис. 3.7,6. Графический анализ задачи представлен на Рис. 3.7,в. Поскольку таблица со- держит постоянные значения, целесообразно разместить ее в памяти программ. В этом случае для чтения кода из таблицы следует использовать команду MOVC BCDdigit | 0 | 0 | 0 | 0 | D3ID2ID1I DO I Ч_________________> Код цифры а) Процессор BCD digit / Hamming Базовый адрес таблицы DPTR | DPH | PPL ~| Цифра - Рз р2 Di Pl d2 D3 D4 0 0 0 0 0 0 0 0 0 1 0 1 1 0 1 0 0 1 2 0 0 1 0 1 0 1 0 3 0 1 0 0 0 0 1 1 4 0 1 0 0 1 1 0 0 5 0 0 1 0 0 1 0 1 6 0 1 1 0 0 1 1 0 7 0 0 0 0 1 1 1 1 8 0 1 1 1 0 0 0 0 9 0 0 0 1 1 0 0 1 б) (СОМНатгт?) _ 1 4 _— Переслать базовый адрес таблицы в DPTR |—2—4--------- Читать код из таблицы ( RET ) В) Puc. 3.7. Преобртзопанис кода “Unpacked BCD” п 7-бнтный код Хемминга: а) формат входного кода; б) таблица преобра «тання; в) анализ задачи; г) граф схема .он ори гма
3.1. Особенности системы команд и приемы программирования A,@A+DPTR (см. Табл. 1.2). Таким образом, если аккумулятор А содержит код десятичной цифры BCD_digit, а регистр DPTR — базовый адрес таблицы, то пос- ле операции чтения из таблицы с помощью команды MOVC A,@A+DPTR в акку- муляторе будет записан код Хемминга Hamming. Следовательно, алгоритм (Рис. 3.7,г) содержит всего две операции: переслать базовый адрес таблицы в DPTR (1) и читать код из таблицы (2). Конфигурирование МК выполнено аналогично задаче 1, и код конфигурации сохранен в файле CONHammconf. Исходный код самой программы, сохраненной под именем CON Hamm, приведен ниже. ; Задача 6: Преобразование кода "Unpacked BCD" в 7-битный код Хемминга ;CON_Hamm.ASM ;--------------- Глобальные/локальные переменные ----------------- $INCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) .------------------------ Сегменты my_stack segment idata rseg my_stack ds lOh cseg at 0 Векторы прерываний org 00h ; Вектор сброса LJMP Config org 0B3h ; Конец области прерываний Код инициализации Config: mov Icall sp,#my_stack-l ; Инициализация стека Init_Device ; Вызов подпрограммы конфигурации / Icall sjmp CON—Hamm $ CON_Hamm: mov move DPTR,#Table ; 1.Переслать базовый адрес таблицы A,@A+DPTR ; 2.Читать код из таблицы ret
Глава 3. Проектирование аппаратных и программных средств .-----------------------Таблицы------------------------------ Table: db 00h,69h,2ah,43h,4ch,25h,66h,0fh,70h,19h END В разделе «Главная программа» указана команда вызова подпрограммы преоб- разования кода “Unpacked BCD” в 7-битный код Хемминга. Собственно код ре- шения задачи представлен в разделе «Подпрограммы». Согласно граф-схеме ал- горитма Рис. 3.7,г он содержит всего две команды. Таблица преобразования раз- мещена в разделе «Таблицы». По базовому символическому адресу Table с помощью директивы ассемблера db (определить байт) размещаются 10 байтов ко- дов Хемминга (см. Рис. 3.7,6). Значения байтов указаны в шестнадцатеричном коде. Следующие две задачи иллюстрируют примеры использования арифметичес- ких и логических команд. Задача 7. Написать подпрограмму для суммирования двух чисел без знака раз- мером 8 байт, размещенных во внутренней памяти данных. Входные параметры: DSTaddr — адрес операнда-прием ника и SRC_addr — адрес операнда-источника передаются через регистры R0 и R1. Задача относится к программированию арифметических операций высокой точности. Графический анализ задачи представлен на Рис. 3.8,а. Два операнда, операнд-источник (source operand) и операнд-приемник (destination operand), размером 8 байт, находятся во внутренней памяти данных МК. После выполне- ния операции, как это принято в двухадресных системах, результат должен быть размещен по месту хранения операнда-приемника. Операнды и результат разме- щаются в памяти младшими байтами вперед, т. е. младший байт размещается по меньшему адресу. По сути дела в подобной задаче каждый операнд представляет собой массив байтов, обращение к которому реализуется с помощью косвенной адресации, т. е. с использованием указателей. Указатели операнда-источника SRC_addr и операнда приемника DST addr, согласно условию задачи, размеще- ны в регистрах R0 и R1, как это показано на Рис. 3.8,а. Суммирование отде- льных байтов можно выполнить только в аккумуляторе А, поскольку МК подде- рживает только одноадресные команды сложения (см. Табл. 1.2). И наконец, счетчик цикла Loop Counter можно разместить в дополнительном регистре, на- пример R2. Граф-схема алгоритма сложения высокой точности представлена на Рис. 3.8,6. Алгоритм также имеет циклическую структуру. Поскольку при сложе- нии каждой последующей пары байтов необходимо учитывать перенос от сложе- ния предшествующей пары, внутри цикла необходимо использовать команду сложения с учетом переноса. Это значит, что в блоке инициализации цикла (1) необходимо очистить перенос. Кроме этого необходимо установить счетчик цик- ла на 8. Внутри тела цикла нужно загрузить байт операнда-приемника DST в ак- кумулятор (2), сложить с байтом операнда-источника SRC с учетом переноса (3), а затем запомнить результат вместо бай га приемника (4). Блок инкремента указа- телей (5) и проверка конца цикла (6) завершают операции алгоритма.
3.1. Особенности системы команд и приемы программирования Puc. 3.8. Сложение высокой точности: а) анализ задачи; б) граф-схема алгоритма. Конфигурирование МК выполнено аналогично задаче I, и код конфигурации сохранен в файле ADD8_conf. Исходный код самой программы, сохраненной под именем ADD8, приводен ниже. ; Задача 7: Сложение высокой точности ;ADD8.ASM ;---------------- Глобальные/локальные переменные ---------------- SINCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) ------------------------- Константы ------------------------------ DST_addr oqu RO
Глава 3. Проектирование аппаратных и программных средств SRC_addr equ Loop_counter equ R1 R2 Сегменты my_stack segment idata rseg ds my_stack lOh iseg at 40h DST: ds 8 SRC: ds 8 cseg at 0 "R TZ ГЛ t-T О П2ГТЛТЛ , ______ f иск1еры прерывании org 00h ; Вектор сброса LJMP Config org 0B3h ; Конец области прерываний Код инициализации Config: mov sp,#my_stack-l Icall Init_Device ; Инициализация стека ; Вызов подпрограммы конфигурации ----------- Главная программа mov DST_addr, #DST mov SRC_addr,#SRC Icall ADD8 sjmp $ — Подпрограммы - — ADD8: mov Loop_c ount er,#8 ; 1.Loop_counter = 8 clr c ; Очистить перенос LOOP: mov a,@DST_addr 2.Загрузить байт DST в А adde a,@SRC_addr ; 3.Сложить с байтом SRC и переносом mov @DST_addr,a 4.Запомнить байт DST inc DST_addr 5.Инкремент DST_addr inc SRC_addr ; Инкремент SRC_addr djnz Loop_counter,LOOP ; 6.Конец цикла? ret END В разделе «Константы» с помощью директивы ассемблера equ назначены спе- циальные имена — DST_addr, SRC_addr и Loop_Counter регистрам RO, R1 и R2. Предполагается, что операнд-приемник DST и операнд-источник SRC находятся во внутренней памяти данных в абсолютном сегменте типа Iscg адресу 40Н (см. раздел «Сегменты»). В разделе «Главная программа» указана команда вызова под-
3.1. Особенности системы команд и приемы программирования программы сложения высокой точности, перед которой записана последователь ность команд передачи параметров. Собственно код решения задачи представлен в разделе «Подпрограммы». Подробные комментарии полностью соответствуют граф-схеме алгоритма Рис. 3.8,6 и позволяют понять, какие команды использу- ются для кодирования блоков алгоритма. Задача 8. Написать подпрограмму для преобразования числа в коде “Packed BCD” в двоичное число размером 8 бит. Входной параметр BCD numbern выход- ной параметр BIN number передаются через аккумулятор А. Формат упакованного двоично-десятичного кода “Packed BCD” показан па Рис. 3.9,а. Байт содержит двоичный код первой (старшей) десятичной цифры (старшие четыре бита) и двоичный код второй (младшей) десятичной цифры (младшие четыре бита). Значение числа равно значению первой цифры, умно женной на I О, плюс значение второй цифры. Графический анализ задачи представлен на Рис. 3.9,6. Входное число BCD number и результат преобразования BIN number размещены в аккумуляго ре А. Для выполнения умножения множитель Multiplier придется разместить в ре гистре В. И наконец, для разделения цифр потребуется регистр временного хра- нения temp, который можно разместить в регистре R7. Packed BCD |D7|D6|D5|D4|D3|D2|D1|DO| Первая цифра Вторая цифра а) (CON_BCD ) г- 1 I Сохранить BCDnumber в temp 2 Г Выделить первую цифру Умножить первую цифру на 10 4 I Обменять результат с temp 5 I Выделить вторую цифру Сложить с temp I ’• ( RET ) в) б) 1‘ис. .1.9. I IpeoGpa юианнс числа в коле “Packed BCD" в двоичное число: а) форма) входного кола; 6) авали i за гачи; в) граф-схема алгоритм i
Глава 3. Проектирование аппаратных и программных средств Граф-схема алгоритма преобразования числа в коде “Packed BCD” в двоичное число представлена на Рис. 3.9,в. Сохранив копию входного кода в регистре temp (1), можно выделить в аккумуляторе первую цифру (2), затем умножить ее на 10 (3). Путем обмена содержимого аккумулятора, в котором содержится вычислен- ное произведение, с регистром temp (4) можно одновременно сохранить проме- жуточный результат и восстановить входной код в аккумуляторе. Там можно за- тем выделить вторую цифру (5) и прибавить к ней вычисленное ранее произведе- ние, сохраненное в регистре temp (6). Результат сложения, как выходной параметр, остается в аккумуляторе. Конфигурирование МК выполнено аналогично задаче 1, и код конфигурации сохранен в файле CON_BCD_conf. Исходный код самой программы, сохраненной под именем CON_BCD, при- веден ниже. Задача 8: Преобразование числа в коде "Packed BCD" в двоичное ;CON_BCD.ASM ;--------------- Глобальные/локальные переменные ---------------- $INCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) ;------------------------Константы-------------------------------- temp equ R7 Multiplier equ В .------------------------Сегменты--------------------------------- my_stack segment idata rseg my_stack ds lOh cseg at 0 i org LJMP Векторы прерывании OOh ; Вектор сброса Config org 0B3h ; Конец области прерываний t Config: mov Icall sp,#my_stack-l ; Инициализация стека Init_Device ; Вызов подпрограммы конфигурации 1 Icall sjmp CON-BCD $
3.1. Особенности системы команд и приемы программировани Подпрограммы mov temp,a ; 1.Сохранить BCD_Number в temp swap a ; 2.Выделить первую цифру anl a,#0fh mov Multiplier,#10 ; 3.Умножить первую цифру на 10 mul ab xch a,temp ; 4.Обменять результат с temp anl a,#0fh ; 5.Выделить вторую цифру add a,temp ; 6.Сложить с temp ret END В разделе «Константы» с помощью директивы ассемблера equ назначены спе- циальные имена — temp и Multiplier — регистрам R7 и В. В разделе «Главная про- грамма» указана команда вызова подпрограммы преобразования. Собственно код решения задачи с подробными комментариями представлен в разделе «Подпро- граммы». Для выделения первой цифры используется удобная здесь операция об- мена ниблов (полубайтов), так называемый свопинг (swapping), и маскирование с помощью операции «логическое И». Для выделения младшей цифры необходимо только маскирование. Для умножения применяется команда перемножения бай- тов mul ab (см. Табл. 1.2). Поскольку максимальное значение кода цифры 9, а вто- рой операнд равен 10, результат произведения всегда меньше или равен 90. Это означает, что он будет расположен в младшем байте произведения, т. е. в аккуму- ляторе. Старший байт двухбайтного произведения, размещенный после опера- ции умножения в регистре В, всегда будет равен 0. Следующие две задачи иллюстрируют возможности МК по обработке битов, так называемый «битовый процессор» ядра 8051. Задача 9. Написать подпрограмму для преобразования кода Грея в двоичный, каждый размером 8 бит. Входной параметр Gray code и выходной параметр Bin_code передаются через аккумулятор А. Код, известный под названием код Грея, был запатентован Франком Греем (фирма Bell Labs) в 1953 г. Замечательное свойство этого кода заключается в том, что две соседние комбинации отличаются только одним битом. Это делает код Грея предпочтительным для использования, например, в кодовых датчиках ли- нейных или угловых перемещений. Технологические погрешности, возникающие при изготовлении датчиков, в этом случае не смогут привести к ошибкам, превы- шающим значение младшего бита. Принцип построения кода Грея и его отличие от двоичного можно понять из таблицы преобразования трехбитных кодов, при- веденной на Рис. 3.10,а. Схема преобразования n-битного кода Грея Gn_|Gn_2...GiGo в двоичный Bn-iBn-2-. BiBo приведена на Рис. 3.10,6. Из этого рисунка следует, что про- цесс преобразования имеет циклический характер, начинается со старшего бита, причем каждый очередной бит двоичного кода равен сумме по модулю 2
Глава 3. Проектирование аппаратных и программных средств Код Грея Двоичный код ООО 000 001 001 011 010 010 011 110 100 111 101 101 110 100 111 а) (cONGray ) pl I 1. LoopCountei = 8; Очистить CY Инвертировать Gi Преобразование кода Грея в двоичный-- Rotate — 4 — Циклически сдвинуть A влево через CY Bi = Bi+1 0G,, i = (n-1,0) Циклически сдвинуть А влево через CY ( RET ) б) если Bl+j — О, если Bi+1 = 1, Bi=Gi Bi=(Gi)’ в) Рис. 3.10. Преобразование кола Грея идвоичны)! а) таблица преобразования для З-битного кола. (>) схема преобразования; и) анализ задачи, i) ipa<|i схема iuiio|uiimii.
3.1. Особенности системы команд и приемы программирования предшествующего бита двоичного кода и соответствующего бита кода Грея (см. формулу на Рис. 3.10,6). При вычислении старшего бита двоичного кода необходимо использовать дополнительный бит Вп, значение которого равно 0. Графический анализ задачи представлен на Рис. 3.10,в. Входной и выходной код размещаются в аккумуляторе А, бит Bj+1 — во флаге переноса CY. При таком размещении, как это видно из рисунка, сумма по модулю 2 бита переноса и стар шего бита аккумулятора дает значение очередного бита двоичного кода В,, кото рое нужно запомнить в старшем бите аккумулятора взамен соответствующего би та кода Грея. Последующий сдвиг аккумулятора влево через перенос реализуй! сразу две функции: сохраняет бит двоичного кода в младшем освободившемся бите аккумулятора и подготавливает процесс вычисления следующего бита. Если проанализировать подгруппу команд обработки битов (см. Табл. 1.2), то можно заключить, что она не содержит команды логического исключающего ИЛИ (сум мы по модулю 2). С учетом специфики команд обработки битов целесообразно для вычисления значения очередного бита двоичного кода использовать форму лы, приведенные на Рис. 3.10,в (символ «’» означает инвертирование бита). С учетом изложенного можно построить алгоритм, граф-схема которого представлена на Рис. 3.10,г. Для инициализации цикла преобразования следуй установить на 8 (количество бит) счетчик цикла Loop Counter и очистить фл;и переноса CY (1). Внутри тела цикла необходимо проверить состояние флага пере носа (2) и, если CY не равен 0, то инвертировать старший бит аккумулятора, где размещен бит G, (3). Подготовка к следующему циклу включает циклический сдвиг аккумулятора влево через перенос (4) и проверку конца цикла по счетчику (5). И наконец, по окончании цикла необходимо выполнить дополнительный циклический сдвиг (6), поскольку в «кольце» используются фактически 9 бит. Конфигурирование МК выполнено аналогично задаче 1 и код конфигурации сохранен в файле CON_Gray_conf. Исходный код самой программы, сохраненной под именем CONGray, при- веден ниже. Задача 9: Преобразование кода Грея в двоичный ;C0N_Gray.ASM .--------------- Глобальные/локальные переменные ----------------- $INCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) .------------------------- Константы ----------------------------- Loop_Counter equ R3 Gi equ ACC. 7 ;-------------------------Сегменты-------------------------------- my_stack segment idat a гП'-g my_stack
Глава 3. Проектирование аппаратных и программных средств ds 10h cseg at 0 / org LJMP Векторы прерывании OOh ; Вектор сброса Config org 0B3h ; Конец области прерываний t Config: mov Icall sp,#my_stack-l ; Инициализация стека Init_Device ; Вызов подпрограммы конфигурации ---------- Главная программа Icall CON_Gray sjmp $ ; Подпрограммы C0N_Gray: mov Loop_Counter,#8 1.Loop_counter = 8 clr c Очистив CY NEXT: jnc Rotate 2.CY = 0? cpl Gi 3.Инвертировать Gi Rotate: rlc a 4.Циклически сдвинуть А влево djnz Loop_Counter,NEXT 5.Конец кода? rlc a 6.Циклически сдвинуть А влево ret END В разделе «Константы» с помощью директивы ассемблера equ назначены спе- циальные имена — Loop_Counter и Gi — регистру R7 и старшему биту аккумуля- тора АСС.7. Внимательный читатель уже обратил внимание на то, что два элемен- та процессора 8051 имеют по два имени в языке ассемблера: аккумулятор (А и АСС) и флаг переноса (С и CY). Первые имена используются в составе мнемони- ки команды, т. е. транслируются ассемблером в код операции, а вторые представ- ляют собой символическую интерпретацию прямого адреса и определены во включаемом файле (см. Приложение 1). В разделе «Главная программа» указана команда вызова подпрограммы преобразования. Собственно код решения задачи представлен в разделе «Подпрограммы». Подробные комментарии полностью со- ответствуют граф-схеме алгоритма Рис. 3.10,г и позволяют понять, какие коман- ды используются для кодирования блоков алгоритма. Задача 10. Написать подпрограмму для преобразования 7-битного кода Хем- мипга с коррекцией одиночной ошибки в двоичный 4-битный код. Входной па- раметр Hamming и выходной параметр BIN_number передаются через аккумуля- тор А.
3.1. Особенности системы команд и приемы программирования Предметом данной задачи является декодирование кода Хемминга в двоим ный с коррекцией одиночной ошибки. Идея построения 7-битного кода Хеммип- га подробно описана выше (см. описание к задаче 6). Графический анализ задачи представлен на Рис. 3.11,а. Входной и выходной код размещаются в аккумуляторе А, там же путем циклического сдвига можно сформировать маску ошибки EMASK. Код позиции ошибки E POS = QC2C3, вычисляемый по формулам (3.2), следует разместить в бит-адресуемой области внутренней памяти МК, па пример в ячейке с адресом 20Н. Кроме того, при вычислении проверок по форму- лам (3.2) можно использовать внутреннюю схему вычисления флага паритета Р (четности кода в аккумуляторе), поэтому код Хемминга придется маскирован, тремя разными масками. Следовательно, нужна еще одна ячейка для временного ------- Процессор--------- Hamming / BIN number *1 I EMASK Внутренняя ---------память данных--------- Е POS 20Н| 0 | 0 | 0 | 0 | 0 | С, | Сг | Сз | temp ЗОН О I Р3 | Рг I Pl I р, I Рг I Рз I Р4 | 7 6 5 4 3 2 1 0 а) Коррекция r-1.il Сохранить Hamming, ЕPOS=Q — 3.11 CONV •>----- ---4—*------- Преобразование в двоичный код С НЕТ ) Г1-3-1----- Вычислить С2 Вычислить Сз Вычислить С, E_MASK=80h б) Рис. 1,11. Преобразование 7-би того кода Хемминга в двоичный: a) анализ задачи; б) граф-схема алгоритма.
Глава 3. Проектирование аппаратных и программных средств сохранения кода Хемминга перед маскированием. Такую ячейку с именем temp можно разместить, например, по абсолютному адресу ЗОН. Граф-схема алгоритма преобразования 7-битного кода Хемминга в двоичное число представлена на Рис. 3.11,6. Схема представлена в иерархическом виде. Главный алгоритм Hamm_CON включает четыре основных блока: вычисление проверок Сь С2, С3 (1), сравнение кода QC2C3 с нулем (2), если код не равен ну- лю, то выполняется коррекция (3), и преобразование 7-битного кода в 4-битный двоичный (4). Блок проверки (1) содержит цепочку операторов, включая опера- тор инициализации (1.1) и три оператора вычисления проверок (1.2, 1.3, 1.4). Блок коррекции (3) содержит оператор инициализации цикла преобразования двоичного кода позиции ошибки E POS в код маски ошибки EMASK (3.1), цикл преобразования, включающий циклический сдвиг EMASK (3.2) и опера- тор проверки конца цикла по счетчику E POS (3.3), а также непосредственно оператор коррекции кода в ячейке temp (3.4). Блок преобразования в двоичный код (4) включает пересылку кода в аккумулятор (4.1), пересылку бита данных из АСС.4 (D,) в бит переноса CY для временного сохранения (4.2), очистку старших пяти битов в аккумуляторе (4.3) и возврат сохраненного бита из CY в АСС.З. Конфигурирование МК выполнено аналогично задаче 1, и код конфигурации сохранен в файле Hamm_CON_conf. Исходный код самой программы, сохраненной под именем Hamm_CON, приведен ниже. Задача 10: Преобразование 7-битного кода Хемминга в двоичный ;Hamm_C0N.ASM ;--------------- Глобальные/локальные переменные ---- $INCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) Константы E_POS equ 20H Cl equ E_POS.2 C2 equ E_POS.1 C3 equ E_POS.0 temp equ ЗОН Cl_mask equ 00001111b C2_mask equ 00110011b C3_mask equ 01010101b 1 my_stack segment idata rseg my_stack ds lOh cseg at 0 1 org 00h ; Вектор сброса LJMP Config org 0B3h ; Конец области прерываний
3.1. Особенности системы команд и приемы программирования .---------------------Код инициализации-------------------------- Config: mov sp,#my_stack-l ; Инициализация стека Icall Init_Device ; Вызов подпрограммы конфигурации Главная программа Icall Hamm_CON sjmp $ 1 Hamm_CON: mov temp,a 1.1.Сохранить Hamming, E_POS = 0 mov E_POS,#0 anl a,#Ci_mask 1.2.Вычислить Cl mov c,p mov Cl,c mov a,temp 1.3.Вычислить C2 anl a,#C2_mask mov c,p mov C2,c mov a,temp 1.4.Вычислить C3 anl a,#C3_mask mov c,p mov C3,c mov a,E_POS 2.C1C2C3 = 0? jz CONV mov a,#80h 3.1.E_MASK = 80h rotate: rr a 3.2.Циклический сдвиг E_MASK вправо djnz E_POS,rotate 3.3.DJNZ E_POS xrl temp,a 3.4.Коррекция temp CONV: mov a,temp 4.1.Переслать temp в A mov c,ACC.4 4.2.Переслать ACC.4 в CY anl a,#00000111b 4.3.Очистить ACC.7 - ACC.3 mov ACC,3,c 4.4.Переслать CY в ACC.3 ret END В разделе «Константы» с помощью директивы ассемблера equ назначены ад- реса ячейкам E POS и temp, имена Cl, С2, СЗ соответствующим битам кола но зиции ошибки E_POS и значения — маскам Ci mask, C2_mask, С3_та8кдля вы числения битов Сь С2, С3 в соответствии с формулами 3.2 и структурой 7-бигною кода Хемминга. В разделе «Главная программа» указана команда вызова нодпро граммы преобразования. Собственно код решения задачи с подробными коммсн тариями представлен в разделе «Подпрограммы». Код операторов вычисления проверок Сь С2, С3 включает маскирование кода Хемминга в аккумуляторе с по- мощью команды логического И с использованием соответствующей маски, после чего в аккумуляторе остаются только требуемые биты. Сумма по модулю 2 этих битов фиксируется аппаратными ресурсами процессора во флаге паритета Р. Ос- тается только переслать вычисленную сумму по модулю 2 на место ее хранения в соответствующий бит кода позиции ошибки. Поскольку битовые команды МК имеют одноадресную структуру (в качестве битового аккумулятора используется
Глава 3. Проектирование аппаратных и программных средств бит переноса — см. Табл. 1.2), эту операцию можно закодировать двумя команда- ми: сначала переслать бит паритета в бит переноса, а затем бит переноса — по месту хранения. Подробные комментарии полностью соответствуют граф-схеме алгоритма Рис. 3.11,6 и позволяют легко понять, какие команды используются для кодирования остальных блоков и операторов алгоритма. Следующие две программы представляют собой примеры программ с исполь- зованием таймеров. 3.2. Программирование таймеров Задача 11. Написать подпрограмму для генерирования одного цикла тревож- ного звукового сигнала, включающего прямоугольные импульсы частотой 500 и 1000 Гц, длительность сигнала каждой из частот — 1 секунда. Громкоговоритель подключен к выводу Р1.3 микроконтроллера C8051F020. Частота синхронизации микроконтроллера 2 МГц. Графический анализ задачи представлен на Рис. 3.12,а. Для генерирования прямоугольных импульсов целесообразно использовать аппаратный ресурс МК. Генерирование импульса сводится к инвертированию состояния вывода порта Р1.3 каждые полпериода генерируемой частоты. В качестве подходящего аппарат- ного ресурса можно выбрать таймер 0, работающий в режиме 8-битного таймера с автоперезагрузкой (см. п. 1.8.1.1 на стр. 52). Для отсчета интервалов длительнос- тью 1 секунда можно подсчитывать количество полупериодов генерируемой час- тоты. Это можно сделать с помощью программного счетчика. Простейший расчет показывает, что нужен 2-байтный счетчик CNTH:CNTL (см. Рис. 3.12,а). Значение кода перезагрузки для таймера 0 можно рассчитать по формуле Т= 256 — SYSCLK/122F, (3.3) где SYSCLK—частота синхронизации МК; F — генерируемая частота. Значения байтов начальных значений счетчика для интервала 1 секунда свя- заны следующим уравнением: (СН-1)256 +CL = 2-F, (3.4) где СН — старший байт; CL — младший байт. Учитывая, что байты имеют только целочисленные значения, из уравнения (3.4) можно определить: CH = ent(2-F/256), (3.5) CL= rem (2-F/256), где ent — функция выделения целой части; rem— функция выделения остатка
3.2. Программирование таймеров Пуск Стоп таймера 0 таймера О (gensound) -G1 I - Пуск таймера 0 Очистить TFO а) Инициализа- ция 500 Гц rr-2-i— GEN_ SOUND -3 —1------ Инициализа- ция 1000 Гц Частота F[fu] Значение перезагрузки таймера Т Значение счетчика сн CL 500 89 4 232 1000 173 8 208 Инвертировать Р1.3 Стоп таймера 0 -г- 4 -1- GEN_ SOUND I Рис. 3.12. Генерирование тревожного звукового сигнала: а) анализ задачи; б) таблица значений таймера и счетчика; в) граф-схема алгоритма. В таблице на Рис. 3.12,6 приведены рассчитанные по формулам (3.3) и (3.5) значения кода перезагрузки для таймера и значения отсчета заданного интервал i для счетчика, соответствующие каждой из требуемых частот. Граф-схема алгоритма генерирования тревожного сигнала представлена па Рис. 3.11,в в иерархическом виде. Главный алгоритм ALARM включает в себя два блока инициализации (I, 3) и два вызова подпрограммы генерирования звука GEN_SOUND (2, 4). Схема алгоритма функции GEN_SOUND содержит опера- тор пуска таймера О (GI). цикл ожидания переполнения таймера (G2), оператор очистки флага переполнения таймера (G3), опер пор инвертирования состояния
Глава 3. Проектирование аппаратных и программных средств вывода Pl.3 (G4), функцию декрементирования счетчика (G5, G6) и оператор ос- танова таймера (G7). Конфигурирование МК для данной задачи включает запрет сторожевого тай- мера (см. описание к задаче 1), выбор для таймера 0 режима 8-битного таймера с автоперезагрузкой (Timer Mode: 8 Bit Counter/Timer Auto-Reload) и назначение для вывода Р1.3 двухтактного режима (выбор опции Р в строке Push-Pull/Open Drain и разрешение матричного коммутатора — Enable Crossbar). После этого код конфигурации, сохраненный в файле ALARM conf, содержит три подпрограм- мы: конфигурации источников сброса, конфигурации таймеров и конфигурации ввода/вывода. Исходный код самой программы, сохраненной под именем ALARM, приве- ден ниже. Задача 11: Генерирование тревожного звукового сигнала ;ALARM.ASM ;--------------- Глобальные/локальные переменные ---- $INCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) — Константы CNTL equ R6 CNTH equ R7 / — Сегменты my_stack segment idata rseg my_stack ds lOh cseg at 0 / org OOh ; Вектор сброса LJMP Config org 0B3h ; Конец области прерываний .---------------------Код инициализации--------------------------- Config: mov sp,#my_stack-l ; Инициализация стека Icall Init_Device ; Вызов подпрограммы конфигурации ;---------------------Главная программа--------------------------- Icall ALARM sjmp $ ;----------------------- Подпрограммы ---------------------------- ALARM:
3.2. Программирование таймеро! mov mov mov mov call mov mov mov mov call ret TH0,#89 TL0,#89 CNTH,#4 CNTL,#232 GEN_SOUND TH0,#173 TL0,#173 CNTH,#8 CNTL,#208 GEN_SOUND 1.Инициализация 500 Гц 2.Вызов подпрограммы 3.Инициализация 1000 4.Вызов подпрограммы GEN_S0UND ГЦ GEN-SOUND GEN_SOUND: setb TRO G1.Пуск таймера 0 CHECK: jnb TFO,CHECK С2.Флаг таймера TF0 = 1? clr TFO G3.Очистить TF0 cpl Pl.3 G4.Инвертировать Р1.3 djnz CNTL,CHECK G5.Декремент младшего байта счетчика djnz CNTH,CHECK G6.Декремент старшего байта счетчика clr TRO G7.Стоп таймера 0 ret END В разделе «Константы» с помощью директивы ассемблера equ для размсще ния байтов счетчика полупериодов CNTL и CNTH выбраны регистры R6 и R7. В разделе «Главная программа» указана команда вызова подпрограммы генерирова ния тревожного звукового сигнала. Собственно код решения задачи с подробны ми комментариями представлен в разделе «Подпрограммы». Блоки инициализа ции подпрограммы ALARM содержат команды загрузки регистров таймера 0 и счетчика начальными значениями. Для того чтобы первый генерируемый полупе- риод не отличался от остальных, младший регистр таймера загружается тем же значением, что и старший. Подробные комментарии полностью соответствуют граф-схеме алгоритма Рис. 3.12,в и позволяют легко понять, какие команды нс пользуются для кодирования остальных блоков и операторов алгоритма. Задача 12. Написать подпрограмму управления цифровой фотокамерой сие темы контроля скорости движения автомобиля (Рис. 3.13,а). Система должна ie нерировать управляющий импульс, если скорость автомобиля превышает 1(10 км/час. Частота синхронизации микроконтроллера 2 МГц. Как видно из рисунка, система содержит две оптопары, каждая из которых включает инфракрасный (ИК) лазер и И К датчик, расположенные на расстоянии 0.5 м друг от друга. Автомобиль, движущийся со скоростью 100 км/час, пройдет •то расстояние за время: TIME = 0.5 м / 100 км/час = 0.5-3(100/ 100- ЮоО = 0.01 S с. Графическим анализ задачи приведен па Рис. 3.13,6. Измерение скорости мо же1 быть заменено измерением времени прохождения автомобилем мерною oi
Глава 3. Проектирование аппаратных и программных средств Таймер 1 в режиме 1 16-битный счетчик/таймер (TCLK = SYSCLK) Пуск Стоп таймера 1 таймера 1 в) Рис. 3.13. Управление фотокамерой системы контроля скорости автомобиля: а) схема системы; б) анализ задачи; в) граф-схема алгоритма. резка пути. Это можно выполнить с использованием таймера 1, работающего в режиме 1, если запустить его в момент пересечения автомобилем луча ИК лазера первой оптопары и остановить его в момент пересечения луча И К лазера второй оптопары. Если таймер работает на частоте 2 МГц, то при скорости автомобиля 100 км/час отсчет таймера составит 18 000 мкс х 2 МГц = 36 000. Если скорость ав- томобиля будет меньше 100 км/час, то отсчет таймера будет больше, а при низких скоростях будет иметь место переполнение таймера, что фиксируется флагом пе- реполнения TF1. Граф-схема алгоритма CAM cntrl представлена па Рис. 3.13,в. Инициализа- ция процесса сводится к очистке регистров и флага переполнения таймера 1 (1), после чего система ожидает перекрытия автомобилем луча первой оптопары, подключенной к выводу Р1.0 (2). 13 момент ког и ситпал на входе Р1.0 становится
3.2. Программирование таймеров равным 0, производится запуск таймера (3). Отсчет таймера продолжается вплоть до срабатывания датчика второй оптопары, подключенной к выводу Р1.1 (4). В этот момент производится останов таймера (5) и проверка величины скорости (6). Если скорость превышает 100 км/час, то производится генерирование управ ляющего импульса (7). Конфигурирование МК для данной задачи включает запрет сторожевого таи мера (см. описание к задаче 1), выбор для таймера 1 режима 1 (Timer Mode: 16 Bit Counter/Timer) и входной частоты SYSCLK, а также назначение для вывода Р1.2 двухтактного режима (выбор опции Р в строке Push-Pull/Open Drain плюс разре шение матричного коммутатора — Enable Crossbar). После этого код конфигура ции, сохраненный в файле CAM cntrl conf, содержит три подпрограммы: коп фигурации источников сброса, конфигурации таймеров и конфигурации вво да/вывода. Исходный код самой программы, сохраненной под именем CAM_cntrl, при веден ниже. Задача 12: Управление камерой системы контроля скорости автомобиля ;CAM_cntrl.ASM ;---------------- Глобальные/локальные переменные ---------------- $INCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) ;------------------------- Сегменты ------------------------------ my_stack segment idata rseg my_stack ds lOh cseg at 0 ;--------------------- Векторы прерываний------------------------- org OOh ; Вектор сброса LJMP Config org 0B3h ; Конец области прерываний f--------------------- Код инициализации ------------------------- Config: mov sp,#my_stack-l ; Инициализация стека Icall Init_Device ; Вызов подпрограммы конфигурации clr pl.2 ; Установить низкий уровень выхода ; --------------------Главная программа--------------------------- Icall CAM_cntrl sjmp $ I Подпрограммы
Глава 3. Проектирование аппаратных и программных средств CAM_cntrl: mov mov clr THl,#0 TL1,#O TF1 1.Очистить THl, TL1, TF1 WAIT1: jb P1.0,WAITl 2.P1.0 = 1? setb TRI 3.Пуск таймера 1 WAIT2: jb P1.1,WAIT2 4.P1.1 = 1? clr TRI 5.Стоп таймера 1 jb TF1,RETURN 6.Скорость V>100? mov a, THl cjne a,#high 36000,\pheck_h mov a,TLl cjne a,#low 36000,check_l check_l: jnc RETURN s jmp pulse check_h: jnc RETURN pulse: setb Pl. 2 7.Вывести управляющий импульс nop clr Pl. 2 RETURN: END ret В разделе «Код инициализации», кроме команды вызова подпрограммы ини- циализации, добавлена команда очистки бита Р1.2 для установки исходного низ- кого уровня управляющего сигнала (после сброса все биты регистров портов уста- навливаются в состояние логической 1). В разделе «Главная программа» указана команда вызова подпрограммы управления фотокамерой системы контроля ско- рости автомобиля. Собственно код решения задачи с подробными комментария- ми представлен в разделе «Подпрограммы». Подробные комментарии полностью соответствуют граф-схеме алгоритма Рис. 3.13,в и позволяют легко понять, какие команды используются для кодирования операторов алгоритма. Оператор 6 включает команду условного перехода к команде возврата из подпрограммы, если установлен флаг переполнения таймера 1, и команды сравнения двухбайтного со- держимого таймера и числа 36 000, соответствующего скорости 100 км/час. Для выделения старшего и младшего байтов этого числа использованы функции ас- семблера high и low. Сначала выполняется сравнение старших байтов и лишь в случае их равенства — сравнение младших байтов. Результат оценивается по со- стоянию бита переноса — он будет в состоянии логического 0, если содержимое таймера больше заданного. Формирование управляющего импульса (7) произво- дится путем установки бита порта Р1.2 в состояние логической 1, временной за- держки с помощью холостой команды NOP и последующей очистки этого бита. Нетрудно подсчитать, что длительность управляющего импульса при этом соста- вит 3 периода синхронизации (2 — время, вносимое командами установки/очист- ки бита, и 1 — холостая команда, см. данные в Табл. 1.2). Для частоты синхрониза- ции 2 МГц это составит 1.5 мкс. Следующие две задачи посвящены программированию с использованием прерываний.
3.3. Обработка прерываний 3.3. Обработка прерываний Задача 13. Написать подпрограммы обслуживания прерываний компаратора О и таймера 1 для генерирования управляющего импульса системы фазового уп равления мощностью (Рис. 3.14,а). Входной параметр power ratio — коэффициеш мощности — передается в подпрограмму таймера 1 через ячейку внутренней па мяти данных с адресом ЗОН. Частота синхронизации микроконтроллера 2 МГц. Прерывания Q CP0JSR ) —С.1 — Очистить флаги прерывания (jMRIJSR ) гТ.1 , Стоп таймера 1 Сохранить PSW, АСС, DPL.DPH -с.з * — Загрузить и запустить таймер 1 ’ рС.4 + Восстановить DPH, DPL, АСС, PSW I ( RETI ) Установить бит Р2.0 Задержка 100 мкс Очистить битР2.0 СЕЮ б) в) Рис. 3.14. Фазовое управление мощностью: а) электрическая схема; б) временные диаграммы; в) граф схема алгоритма.
Глава 3. Проектирование аппаратных и программных средств Как следует из рисунка, нагрузка LOAD подключается к однофазной сети пе- ременного тока частотой 50 Гц (LINE — NEUTRAL) с помощью триака Q1 (TR1AC). Управление триаком осуществляется с вывода Р2.0 МК через оптоизо- лятор 1SO1 (МОС3010). Для надежного запуска триака МК должен формировать управляющий импульс длительностью 100 мкс. Датчик начальной фазы выпол- нен на базе делителя-ограничителя (R2, R5, D1), подключенного ко входу встро- енного в МК аналогового компаратора 0. Временные диаграммы для про- Таблица 3.1. Угол и время зажигания семистора Коэффициент мощности 10-Р/Ртах Угол зажигания [радиан] Время зажигания т [мкс] 0 3.1416 10000 1 2.3280 7410 2 2.0850 6636 3 1.8960 6035 4 1.7290 5503 5 1.5705 4999 6 1.4120 4494 7 1.2450 3962 8 1.0565 3362 9 0.8130 2587 10 0.0000 0000 цесса управления мощностью приве- дены на Рис. 3.14,6. В момент фазы О градусов входной волны синусоидаль- ного напряжения на линии LINE по- является положительный перепад на- пряжения на выходе компаратора 0, в момент фазы 180 градусов — отрица- тельный перепад. Наличие этих пере- падов на выходе компаратора 0 вызы- вает установку соответствующих фла- гов запросов прерывания: флага нарастающего фронта CP0RIF и пада- ющего фронта CP0FIF (см. п. 1.10.4 на стр. 108 и Табл. 1.4) в регистре CPT0CN. Угол зажигания триака и со- ответственно коэффициент мощнос- ти, передаваемой в нагрузку (см. диаграмму тока нагрузки Load), зависят от вели- чины задержки управляющего импульса т (времени зажигания). В Табл. 3.1 приведены значения угла и времени зажигания триака в зависи- мости от требуемого коэффициента мощности, выраженного в относительных единицах в диапазоне от Одо 10 (поданным [3]). Граф-схема алгоритма для задачи фазового управления мощностью представ- лена на Рис. 3.14,в. Подпрограмма обслуживания прерывания от компаратора 0 CP0_ISR осуществляет инициализацию таймера 1 для отсчета времени т. Первый оператор этого алгоритма обнуляет флаги запроса прерывания (С.1), а оператор С.З обеспечивает загрузку таймера 1 табличным значением в соответствии с за- данным коэффициентом мощности и запуск его. Поскольку эта процедура связа- на с использованием определенных регистров МК, то их следует сохранить в сте- ке перед выполнением процедуры (С.2), а после выполнения — восстановить (С.4). Подпрограмма обслуживания прерывания от таймера 1 TMR1ISR обеспе- чивает формирование импульса зажигания триака. Для этого после останова тай- мера (Т.1) производится установка бита Р2.0 (Т.2), затем задержка длительностью 100 мкс (ТЗ) и очистка бита Р2.0 (Т4). Конфигурирование МК для данной задачи включает запрет сторожевого тай- мера (см. описание к задаче 1), выбор для гаймера 1 режима 1 (Timer Mode: 16 Bit Counter/Timer) и входной частоты SYSCI К, разрешение компаратора 0 (Enable Comparator 0), разрешение прсрыв шип оз компаратор* 0 и таймера 1 (Enable СРО
3.3. Обработка прерываний Falling Interrupt, Enable СРО Rising Interrupt, Enable Timer 1 Interrupt), а также на- значение для вывода Р2.0 двухтактного режима (выбор опции Р в строке Push- Pull/Open Drain плюс разрешение матричного коммутатора — Enable Crossbar). После этого код конфигурации, сохраненный в файле POWER cntrl conf, содер- жит пять подпрограмм: конфигурации источников сброса, конфигурации тайме- ров, конфигурации компараторов, конфигурации ввода/вывода и конфигурации прерываний. Исходный код самой программы, сохраненной под именем POWER _cntrl, приведен ниже. Задача 13: Фазовое управление мощностью ;POWER_cntrl.ASM ;--------------- Глобальные/локальные переменные ----------------- SINCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) .------------------------ Константы ------------------------------ CPOIPF equ 11001111В ; Маска для сброса флагов компаратора О / Сегменты my_stack segment idata rseg my_stack ds lOh dseg at 30h power_ratio: ds 1 TIME: ds 1 cseg at 0 t org OOh ; Вектор сброса LJMP Config org 001BH Ijmp TMR1_ISR ; Вектор таймера 1 org 0053H Ijmp CP0_ISR ; Вектор падающего фронта компаратора 0 org 005ВН Ijmp CP0_ISR ; Вектор нарастающего фронта компар. 0 org ОВЗЬ ; Конец области прерываний t Config: mov sp,#my_stack-l ; Инициализация стека Icall Init_Device ; Вызов подпрограммы конфигурации clr Р2.0 ; Установить низкий уровень выхода clr TF1 ; Очистить флаг прерывания таймера 1 anl CPTOCN,#CP0IPF ; Очистить флаги прерывания компар. 0 setb ЕА ; Разрешить прерывания r sjmp $ ; Подпрогрпмми обработки прерываний CP0_ISR:
Глава 3. Проектирование аппаратных и программных средств anl CPTOCN,#CP0IPF ; C.l. Очистить флаги прерывания СРО push push push push psw acc dpi dph ; C.2. Сохранить регистры в стеке mov mov rl move mov mov rl inc move mov setb dptr,#tau a,power_ratio a a,@a+dptr til,a a,power_ratio a a a,@a+dptr thl, a tri ; C.3. Загрузить и запустить таймер 1 pop pop pop pop reti TMR1_ISR: clr setb mov djnz clr reti dph dpi acc psw tri P2.0 TIME,#50 TIME.S P2.0 ; C.4. ; T.l. ; T.2. ; T.3. ; T.4. Восстановить регистры из стека Стоп таймера 1 Установить бит Р2.0 Задержка 100 мкс Очистить бит Р2.0 f Таблицы — tau: db low (-2*10000).high ( db low (-2*7410) .high ( db low (-2*6636) .high ( db low (-2*6035) .high ( db low (-2*5503) .high ( db low (-2*4999) .high ( db low (-2*4494) .high ( db low (-2*3962) .high ( db low (-2*3362) .high ( db low (-2*2587) .high ( db 0FFH.0FFH -2*10000) -2*7410) -2*6636) -2*6035) -2*5503) -2*4999) -2*4494) -2*3962) -2*3362) -2*2587) END В разделе «Константы» задана маска для одновременного сброса двух флагов запроса прерывания от компаратора 0. В разделе «Сегменты» задан абсолютный сегмент типа DATA по адресу ЗОН. Внутри сегмента определен байт с именем power ratio и однобайтовая переменная TIME для отсчета времени задержки. В разделе «Векторы прерываний» в дополнение к традиционному вектору сброса определены вектор прерывания гаймсра 1 и два вектора для компаратора 0 в соог •
3.3. Обработка прерываний ветствии с Табл. 1.4. В разделе «Код инициализации» в дополнение к традицион- ным командам добавлены команды установки низкого уровня на управляющем выходе, команды очистки флагов запросов прерывания и команда глобального разрешения прерывания. Раздел «Главная программа» данного примера содержи! только команду бесконечного цикла, так как все заданные функции выполняю! ся внутри подпрограмм обработки прерываний. Структура кода, приведенного в разделе «Подпрограммы обработки прерываний», полностью соответствует граф схеме алгоритма Рис. 3.14,в. Учитывая механизм работы стека, при сохранении и восстановлении регистров использован прямой и обратный порядок следования команд. Загрузка таймера включает загрузку двух байтов из таблицы tau, записан ной в памяти программ, в соответствии с индексом power ratio. Поэтому при счи тывании младшего байта индекс power_ratio предварительно умножается на 2 ну тем сдвига влево на один бит, а при считывании старшего байта — умножается на 2 и инкрементируется. Чтение таблицы производится специальной командой move a,@a+dptr (см. пояснения к задаче 6). Величина задержки в 100 мкс в под программе TMR11SR реализуется путем выполнения цикла декрементирования до 0 переменной TIME с начального значения 50. Это число выбрано из условия, что МК работает на частоте 2 МГц, а выбранная команда djnz direct, rel при реа- лизации перехода требует для выполнения 4 цикла синхронизации (см. Табл. 1.2) В разделе «Таблицы» определена таблица времени зажигания tau в соответствии с данными Табл. 3.1. Для выделения старшего и младшего байтов требуемого зна чения использованы функции ассемблера high и low. Множитель 2 обусловлен частотой синхронизации таймера — 2 МГц, а знак «минус» заставляет ассемблер вычислить дополнение числа до полной емкости 16-битного таймера (до 2|6), ко торое и требуется загрузить в суммирующий таймер для отсчета заданного врсмс ни. Отсчет нулевого времени заменяется отсчетом одного цикла синхронизации путем определения кодов загрузки регистров таймера 0FFH (см. последнюю строку таблицы tau). Задача 14. Написать подпрограмму обслуживания внешнего прерывания INTO для шифратора относительного угла поворота на базе оптического поворо! ного импульсного генератора RPG (Rotary Pulse Generator). 16-битный выходной параметр angle (ANGL и ANGH) — угол — передается через регистры R6 и R7 банка регистров 1. Схема подключения шифратора к МК показана на Рис. 3.15,а. Оптический шифратор относительного угла поворота содержит валик с зубчатым колесом и две оптопары, образованные источником света — ПК светодиодом и ПК датчи ком — приемником света. Зубья имеют прямоугольную форму, причем ширин;! зуба выбирается равной размеру впадины. Расстояние между оптопарами выби рается равным половине размера зуба/впадины. В этом случае при равномерном вращении валика по часовой стрелке (CW — clockwise) или против часовой стрел- ки (CCW — counter-clockwise) на выходе датчиков (каналы А и В) можно паблю дать сигналы, временные диаграммы которых показаны на Рис. 3.15,6. Из врс мспных ди н рамм следует, что если в момент отрицательного перепада напряже- ния в канале А уровень канала В соответствует логической 1, го вращение
Глава 3. Проектирование аппаратных и программных средств Рис. 3.15. Шифратор относительного угла поворота: а) схема шифратора; 6) временные диаграммы; в) граф-схема алгоритма. происходит по часовой стрелке (т. е. угол поворота вапика уменьшается), в про- тивном случае — против часовой стрелки (т. е. угол поворота увеличивается). Такие шифраторы ввиду их простоты широко применяются в органах управ- ления МК-систем (например как регулятор громкости автомобильного приемни- ка) или в датчиках угла поворота механизмов. Совершенно очевидно, что нельзя заранее знать, в какой момент времени повернется валик, поэтому целесообразно построить подпрограмму обслуживания как подпрограмму обработки прерыва пия. Для этого канал А следует подключить ко входу внешних прерываний INTO, а капал В — к любому выводу общего назначения, например к Р1.1, как это пока- зано па Рис. 3.15,а
3.3. Обработка прерываний В этом случае алгоритм обработки прерывания INTO ISR для данной задачи может быть построен по граф-схеме Рис. 3.15,в. Флаг запроса прерывания INTO сбрасывается автоматически (см. Табл. 1.4). Сохранению и восстановлению под- лежит только регистр слова состояния процессора PSW (1.1, 1.10). Поскольку би- ты, определяющие номер активного банка регистров, находятся в регистре PSW (см. Рис. 1.3), его восстановление в конце подпрограммы возвращает и номер ак тивного банка регистров. Оператор (1.2) переключает активный банк, благодаря чему регистры прерванного процесса сохраняются. Проверка состояния вывода Р1.1 (1.3) в момент прерывания позволяет определить направление вращения ва лика RPG. В зависимости от направления нужно выполнить инкремент (1.4, 1.5, 1.6) или декремент (1.7, 1.8, 1.9) двухбайтного значения угла angle. Поскольку в системе команд МК отсутствуют команды 16-битной арифметики, приходится выполнить операцию инкремента/декремента младшего байта, а затем, при опре деленном условии, и старшего байта. Таким условием для инкремента является получение результата ООН после инкремента младшего байта, а для декремента — получение результата FFH после декремента младшего байта. Конфигурирование МК для данной задачи включает запрет сторожевого тай- мера (см. описание к задаче 1), назначение входа внешнего прерывания INTO па свободный выход портов ввода/вывода плюс разрешение матричного коммутаго pa (Enable Crossbar) и разрешение прерывания INTO (Enable /INTO Interrupt) После этого код конфигурации, сохраненный в файле Angle_ENC_conf, содер- жит три подпрограммы: конфигурации источников сброса, конфигурации вво- да/вывода и конфигурации прерываний. Исходный код программы, сохраненной под именем AngleENC, приведен ниже. Задача 14: Шифратор относительного угла поворота ;Angle_ENC.ASM .---------------- Глобальные/локальные переменные ---- SINCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) .-------------------------Константы------------------- ANGL equ R6 ANGH equ R7 .------------------------- Сегменты ------------------ iry_stack segment idata rseg my_stack ds lOh ceeg at 0
Глава 3. Проектирование аппарстгных и программных средств org LJMP org Ijmp org Векторы прерывании OOh ; Вектор сброса Config 0003H INT0_ISR ; Вектор внешнего прерывания 0 0B3h ; Конец области прерываний f Config: mov Icall clr setb sp,#my_stack-l ; Инициализация стека Init_Device ; Вызов подпрограммы конфигурации ТЕО ; Очистка флага внешнего прерывания 0 ЕА ; Разрешить прерывания ---------- Главная программа sjmp $ ;------------- Подпрограммы обработки прерываний INT0_ISR: using 1 push psw ; I.1.Сохранить регистр PSW clr RSI ; 1.2.Переключить на банк регистров 1 setb RSO jb Pl.1,DECR ; I.3.P1.1 = 1? inc ANGL ; 1.4.Инкремент ANGL cjne ANGL,#0.RESTORE ,- 1.5. ANGL = ООН? inc ANGH ; 1.6.Инкремент ANGH sjmp RESTORE DECR: dec ANGL ; 1.7.Декремент ANGL cjne ANGL,#0FFH,RESTORE ; 1.8.ANGL = FFH? dec ANGH ; 1.9.Декремент ANGH RESTORE: pop psw ; I.10.Восстановить регистр PSW reti END В разделе «Константы» присвоены символические имена ANGL и ANGH ре- гистрам банка 1 в соответствии с заданием. В разделе «Векторы прерываний» в дополнение к традиционному вектору сброса определен вектор внешнего преры- вания 0 в соответствии с Табл. 1.4. В разделе «Код инициализации» в дополнение к традиционным командам добавлены команды очистки флага запроса внешнего прерывания 0 и команда глобального разрешения прерывания. Раздел «Главная программа», как и в предыдущей задаче, содержит только команду бесконечного цикла, так как заданная функция выполняется внутри подпрограммы обработки прерываний. Структура кода, приведенного в разделе «Подпрограммы обработки прерываний», полностью соответствует граф-схеме алгоритма Рис. 3.15,в. Псев- докоманда ассемблера using 1 в первой строке кода сообщает ассемблеру и компо- новщику о необходимости резервирования адресов 08Н...10Н внутренней памяти данных для банка регистров 1 (см. Рис. 1.6). Для переключения рабочего банка
3.4. Программирование контроллеров последовательной связи используются команды изменения состояния битов RS1 и RS0. Подробные ком- ментарии полностью соответствуют граф-схеме и позволяют легко понять, какие команды используются для кодирования операторов алгоритма. Следующие три задачи демонстрируют программирование встроенных кош роллеров последовательной связи. 3.4. Программирование контроллеров последовательной связи Задача 15. Написать подпрограмму обслуживания прерывания контроллера последовательной связи UARTO для обмена сообщениями с компьютером по ип терфейсу RS-232 (см. Рис. 1.55,а) в асинхронном режиме дуплекса. Каждое сооб- щение представляет собой символьную строку в коде ASCIIZ. Максимальная длина сообщения — 16 байт. Скорость передачи — 2400 бод, размер данных — 8 бит, включая бит четного паритета. Графический анализ задачи приведен на Рис. 3.16,а. Во внутренней памяти данных типа 1DATA необходимо разместить два буфера: буфер передатчика и бу- фер приемника. Для доступа к буферам можно использовать указатель передатчи- ка t buffer и указатель приемника r_buffer, в качестве которых можно исполыо вать регистры R0 и R1 отдельного банка регистров, например банка 3. Для кор ректного обращения к банкам со стороны главной программы и подпрограммы обработки прерывания используются следующие флаги: флаг буфера передачи SENT и флаг буфера приема NEW. Состояние 1 флага SENT свидетельствует о том, что все данные из буфера переданы в канал последовательной связи и он пуст (т. е. процессор может загрузить в него новое сообщение, обнулить фл<п SENT и установить флаг запроса прерывания передатчика Т10, инициируя начало передачи). Состояние 1 флага NEW свидетельствует о том, что в буфере приемпп ка имеется новое сообщение (т. е. процессор должен как можно быстрее прочи тать это сообщение и обнулить флаг NEW). Кроме того, необходим специальный флаг ERROR для фиксации ошибочных ситуаций: когда принятый байт имсеч ошибку четности или пришел байт нового сообщения до того, как процессор ос вободил буфер приема (обнулил флаг NEW). Все эти флаги можно разместить в битовой области BIT внутренней памяти данных МК. Граф-схема алгоритма для решения данной задачи приведена на Рис. 3.16,6 Алгоритм включает в себя два блока: «Передача» и «Прием». В начале первого блока проверяется состояние флага запроса прерывания пе- редатчика TI0 (1). Если он установлен, значит, очередной байт передан. Произво- дится очистка флага Т10 (2) и проверка флага буфера передатчика SENT (3). Если он установлен, это значит, что был передан последний байт сообщения и больше пока ничего передавать не нужно. Если он не установлен, нужно прочитать оче релпон бант п «буфера, па который указывает указатель, после чего указатель ип кременти ропать (4). Далее необходимо добавить к прочитанному байту бит четно ю iiapmeia (5) п игру и гп> байт в передатчик (6). Если зт ружепнын байi равен О
Глава 3. Проектирование аппаратных и программных средств Процессор Банк регистров 3 IDATA С UARTJSR Внутренняя память данных Буфер приемника SENT NEW ERROR Буфер передатчика R1 | г buffer RO | t buffer - 2 Очистить TIO TIO = 1? SENT=1? Да Нет Передача check г г-13 г-10- Добавить бит паритета г- 6—-------- Загрузить байт в передатчик г8------------ Реинициализа- ция указателя. Установить SENT -4 —----- Читать байт из буфера Инкремент указателя Да Байт = О? Нет 9 RIO = 1? Нет Очистить RIO 12 Нет Да Да Удалить бит паритета NEW= 1? ФлагР= 1? г16----------- Реинициализа- па ция указателя. Установить NEW 15 exits Установить ERROR set_err г17— Байт = О? Нет Прием г-14—-------- Сохранить байт в буфере. Инкремент указателя Рис. 3.16. Программирование контроллера UAR Г: а) анализ задачи; б) граф-схема алгоритма.
3.4. Программирование контроллеров последовательной связр (7), то это означает конец сообщения (байт ООН в строке ASCIIZ — последний байт). Тогда перед выходом из блока передачи нужно реинициализировать указа тель буфера на начало и установить флаг SENT (8). В начале блока «Прием» проверяется состояние флага запроса прерывания приемника R10 (9). Если он установлен, значит, очередной байт принят. Произво дится очистка флага RI0 (10) и проверка флага буфера приемника NEW(11). Если он установлен, то это значит, что очередной байт пришел до того, как процессор прочитал сообщение и освободил буфер приемника, т. е. возникла ошибка пере- полнения буфера. Затем проверяется флаг паритета Р (12), если его значение 1, то паритет нечетный, т. е. возникла ошибка канала передачи. В обоих случаях следу ет установить флаг ошибки ERROR (17). Если же ошибок нет, нужно удалить и i принятого байта бит паритета (13) и сохранить байт в буфере приема, после чего инкрементировать его указатель (14). Если последующая проверка байта на ра венство 0 (15) дает положительный результат, это означает, что принят последний байт сообщения и перед выходом из блока следует реинициализировать указатель буфера приема и установить флаг NEW (16). Конфигурирование МК для данной задачи включает запрет сторожевого тан мера (см. описание к задаче 1) и конфигурирование контроллера UARTO, а также сопутствующих узлов: таймера синхронизации, прерываний и портов ввода/вы- вода. Для этого с помощью мастера конфигурации (Configuration Wizard 2) можно открыть окно UARTs и выбрать вкладку UARTO, как показано на Рис. 3.17. Для UARTO нужно выбрать режим 1: асинхронная передача 8 бит, переменная ско- рость (8 Bit UART, Variable Baud Rate) и установить флажок разрешения приема (Enable UARTO Reception). Затем нажать кнопку конфигурации скорости (Configure Baud Rate). После этого открывается окно конфигурации таймеров Timers. Для синхронизации UARTO можно выбрать таймер 1, работающий в ре жиме 2: 8-битный таймер с автоперезагрузкой (8 Bit Counter/Timer Auto-Reload), синхронизирующийся непосредственно от генератора системной синхронизации SYSCLK. Кроме этих опций на вкладке таймера 1 необходимо также установить флажок разрешения (Enable Timer), как показано на Рис. 3.17. Затем нужно па жать на кнопку изменения скорости (Change Baud Rate) на вкладке таймера 1 и в открывшемся окне калькулятора ввести требуемую скорость 2400 бод. После под тверждения мастер конфигурации производит расчет и формирует команду за грузки начального значения таймера (см. Рис. 3.17). Нажатие кнопки ОК на вкладке таймеров возвращает процесс к продолжению конфигурирования UARTO. Нажатие кнопки конфигурации прерываний (Configure UART Interrupts) вызывает открытие окна конфигурации прерываний Interrupts. Там надо усташи вить флажок разрешения прерываний Enable UARTO Interrupt и нажать кнопку ОК. Для завершения конфигурации необходимо нажать кнопку конфигурации портов ввода/вывода (Configure Port I/O) на вкладке конфигурации UARTO (см. Рис. 3.17) и в открывшемся окне конфигурации портов Port I/O установить два флажка — UARTO и Enable Crossbar, после чего нажать кнопку ОК. Нажатие кнопки ОК в окне 1 lARTs ч«нершает конфигурацию МК. После этого код конфи гурации, сохраненный в файле UART_conf, содержит пять подпрограмм: конфи
Глава 3. Проектирование аппаратных и программных средств гурации источников сброса, конфигурации таймеров, конфигурации UART. кон- фигурации ввода/вывода и конфигурации прерываний. Исходный код для данной задачи, сохраненный под именем UART, приведен ниже. Задача 15: Программирование контроллера UART UART.ASM ;--------------- Глобальные/локальные переменные ----------------- SINCLUDE(C8051F020.INC) ; Файл с определениями для МК Extrn t_buffer code (Init_Device) equ Константы RO ; Указатель передатчика (банк 3) ,r_buffer TBUFFER RBUFFER t my_stack my_idata SENDING: RECEIVING: my_bits SENT: NEW: ERROR: equ R1 ; Указатель приемника (банк 3) equ 18h ; Указатель передатчика (адрес) equ 19h ; Указатель приемника (адрес) Сегменты segment idata rseg my_stack ds lOh SEGMENT IDATA RSEG my_idata DS 16 ; Буфер передатчика DS 16 ; Буфер приемника SEGMENT BIT RSEG my_bits DBIT 1 ; Флаг "ПОСЛАНО" DBIT 1 ; Флаг "НОВОЕ СООБЩЕНИЕ" DBIT 1 ; Флаг "ОШИБКА" cseg at 0 / org LJMP ORG Ijmp org OOh ; Вектор сброса Config 0023h UART0_ISR ; Вектор UARTO 0B3h ; Конец области прерываний t Config: f mov Icall clr setb clr mov mov clr clr setb sp,#my_stack-l ; Инициализация стека Init_Device ; Вызов подпрограммы конфигурации ERROR ; Инициализировать флаги подпрограммы SENT NEW TBUFFER,#SENDING ; Инициализировать указатели RBUFFER,#RECEIVING TIO ; Очистка флагов прерывания UARTO RIO ЕА ; Разрешить прерывания Главная программа UART
3 4. Программирование контроллеров послеАовательной связи Puc. .I./7. IlpoipiiMMii)><iti;iiiite контроллера I)\1< 1 Koii<|iinvp:imi>i МК
Глава 3. Проектирование аппаратных и программных средств \ sjmp $ — Подпрограммы обработки прерываний ------- UART0_ISR: using 3 Используется банк регистров 3 push acc Сохранить регистры push psw setb RSO Переключить на банк регистров 3 setb RSI jnb TIO,check_r 1.TI0 = 1? clr TIO 2.Очистить TI0 jb SENT,check_r ; 3.SENT = 1? mov A,@t_buffer ; 4.Читать байт из буфера передатчика inc t_buffer Инкремент указателя mov C,P 5.Добавить бит паритета mov ACC.7 ,C mov SBUFO,A 6.Загрузить байт в передатчик jnz check_r 7.Байт = 0 ? mov t_bu f f er,# SENDING ; 8.Реинициализация указателя setb SENT Установить SENT check_r: jnb RIO,exits 9.RIO = 1? clr RIO 10.Clear RIO jb NEW,set_err ; 11.NEW = 1? mov A,SBUFO 12.Флаг P = 1? jb P,set_err clr ACC. 7 13.Удалить бит паритета mov @r_buffer,A ; 14.Сохранить байт в буфере приемника inc r_buffer ; Инкремент указателя jnz exits 15.Байт = 0? mov r_buffer,ttRECEIVING ; 16.Реинициализация указателя setb NEW Установить NEW sjmp exits set_err: setb ERROR 17.Установить ERROR exits: Pop psw Восстановить регистры pop acc reti END В разделе «Константы» присвоены символические имена указателей tbuffer и r_buffer регистрам R0 и R1 банка 3. Для доступа к указателям со стороны главной программы их абсолютные адреса присвоены символическим обозначениям TBUFFER и RBUFFER. В разделе «Сегменты» в соответствии с Рис. 3.16,а опре- делен переместимый сегмент IDATA, содержащий буфер передатчика SENDING и буфер приемника RECEIVING (каждый размером по 16 байт), а также перемес- тимый сегмент BIT, содержащий требуемые флаги. В разделе «Векторы прерыва- ний» в дополнение к традиционному вектору сброса определен вектор UART 0 в соответствии с Табл. 1.4. В разделе «Код инициализации», в дополнение к тради- ционным командам, добавлены команды инициализации флагов и указателей бу- феров, очистки флагов запроса прерываний передатчика и приемника, а также
3.4. Программирование контроллеров последовательной связи команда глобального разрешения прерывания. Раздел «Главная программа» дан ного примера содержит только «заглушку» — команду бесконечного цикла. Ре- альная главная программа, как было указано выше, должна содержать функции процессора по обслуживанию буферов: загрузки сообщения в буфер передатчика и чтения сообщения из буфера приемника. Структура кода, приведенного в раз- деле «Подпрограммы обработки прерываний», полностью соответствует граф- схеме алгоритма Рис. 3.16,6. Подробные комментарии позволяют легко понять, какие команды используются для кодирования операторов алгоритма. Операции сохранения содержимого регистров процессора и изменения номера активного банка регистров выполнены так же, как в задаче 14. В качестве дополнительного пояснения можно добавить, что бит паритета размещается в старшем бите пере- даваемого байта. Задача 16. Написать подпрограмму для записи управляющей информации в цифровые потенциометры электронной системы (Рис. 3.18,а) с помощью шипы SMBus. Входные параметры: slave address — адрес ведомого, instruction — команда и data byte — байт данных — передаются через ячейки внутренней памяти данных с адресами ЗОН, 31Н, 32Н. Электронная система включает в себя МК и четыре} микросхемы цифровых потенциометров AD5242 фирмы Analog Devices [4]. БЛок-схема цифрового по- тенциометра представлена на Рис. 3.18,6. Микросхема содержит два цифровых потенциометра — 1 и 2, каждый из которых имеет по 3 вывода: A, W и В. Выход- ное напряжение Vwb между выводами W и В описывается следующей зависи- мостью: Vwb(D) — (Vab/256)-D. где VAB - напряжение между выводами А и В, D— 8-битный управляющий код. Управляющий код D для каждого из потенциометров размещается в соответс- твующем регистре RDAC REGISTER Кроме аналоговых выходов, данная микро схема имеет два цифровых битовых выхода — Q! и Q2 , на которые выводится ин- формация из регистра REGISTER. Кроме этого микросхема содержит Поспелова тельный входной регистр SERIAL INPUT REGISTER, представляющий собой 3- байтный приемник, работающий по протоколу 12С, полностью совместимому с SMBus (см. п. 1.9.1 на стр. 76), в режиме ведомого. Этот приемник рассчитан па прием сообщения, формат которого приведен на Рис. 3.18,в. Первый байт сооб щения содержит адрес ведомого (SLAVE ADDRESS BYTE). Если два бита этого сообщения — AD1 и ADO совпадают со значениями, установленными на одно- именных внешних выводах микросхемы (см. Рис. 3.18,6), то последующие байты принимаются приемником. Второй байт является командой (INSTRUCTION BY ГЕ). Первый бит A/В этого байта позволяет выбрать потенциометр 1 (А/В = 0) или 2 (А/В = 1). Второй бит RS — бит сброса потенциометра в среднее положение, третий бит SD — бит перевода потенциометра п выключенное состояние. Биты Q] и Q> пересылаются на одноименные выходы микросхемы. Символом X обозначе- ны биты, состояние которых не имеет значения. Третий байт (DATA BYTE) со-
Глове 3. Проектирование аппаратных и программных средств потенциометр а) б) о S I 1 I О I 1 I 1 |aDt|aDo]r/W А А/в| RS | SD | Q, | О2 | X | X | X A D7 | 06 | D5 | D41D3 | D2 | Р1~[ SLAVE ADDRESS BYTE DO DATA BYTE р А INSTRUCTION BYTE Прерывания SMBus В) Рис. 3.18. Управление цифровыми потенциометрами по шине SMBus: а) схема системы; б) блок-схема цифрового потенциометра; в) формат передачи.
3.4. Программирование контроллеров последовательной связи держит данные D, которые загружаются в выбранный регистр RDAC REGISTER для управления выходным напряжением микросхемы потенциометра. Электронная система в рассматриваемом примере содержит 4 таких микро схемы (см. Рис. 3.18,а) и МК, соединенные по шине SMBus. Для каждой из мик- росхем AD5242 определен адрес за счет коммутации адресных входов AD1 и ADO. Таким образом, максимальное количество потенциометров в системе — 8. М К яв- ляется ведущим устройством, а микросхемы потенциометров — ведомыми. Для управления потенциометрами используется только режим передачи информации от ведущего устройства к выбранному ведомому. Графический анализ задачи представлен на Рис. 3.19,а. Перед тем как вызвать подпрограмму записи информации в цифровой потенциометр, процессор должен подготовить 3 байта, подлежащие передаче: slave address - адрес ведомого, instruction — команда и data_byte — байт данных, и разместить их во внутренней памяти данных МК, начиная с адреса ЗОН. Поскольку процесс носит цикличес кий характер, целесообразно использовать косвенную адресацию через указатель PNT, в качестве которого можно выбрать регистр R0. Предлагаемая для решения задачи граф-схема алгоритма представлена на Рис. 3.19,6. Функция записи в цифровой потенциометр WRITE DP содержит оператор инициализации указателя (1), оператор передачи бита START (2) и цикл ожидания прерываний от контроллера SMBus, которые начинают поступать пос- ле передачи бита START (S) вплоть до передачи бита STOP (Р), что показано стрелками на Рис. 3.18,в. Признаком окончания цикла передачи является условие STOP = 1 (4), однако для снижения потребляемой мощности можно поместить в цикл ожидания состояние пониженного потребления энергии IDLE (3), выход из которого может осуществляться по прерываниям (см. п. 1.6.2). Последний прием особенно важен для систем с батарейным питанием. Внутри подпрограммы обслуживания прерывания SMB_ISR (см. Рис. 3.19,6) прежде всего нужно проверить корректность передачи (S1), затем состояние ук! iaгеля PNT (S2). Если значение указателя находится за пределами буфера пере- дачи, значит, все байты переданы и надо передать бит STOP (S3), иначе — пере дать очередной байт (S4) и инкрементировать указатель (S5). Если же на первом шаге была обнаружена некорректность передачи, то необходимо установить флаг ошибки интерфейса SMBus (S6) и завершить передачу (S7). Анализ коррек- цию™ передачи производится по состоянию регистра SMB0STA (см. Табл. 1.6). Поскольку состояние этого регистра действительно только при установленном флаге прерывания SMBus, в отличие от ранее рассмотренных программ обслу живаиия прерывания очистка этого флага (S8) производится не в начале, а в конце процедуры. Конфигурирование МК для данной задачи включает запрет сторожевого ran мера (см. описание к задаче 1) и конфигурирование контроллера SMBus, а также Сопутствующих узлов: прерываний и портов ввода/вывода. Для этого с помощью мастера конфигурации (Configuration Wizard 2) можно открыть окно SMBus, к ik нок напо па Рис. 3.20. В ном окне нужно установит ь флажок разрешения Enable SMBus Нажатие па кнопку Configure Port I/O открывает окно конфигурации портов Port I/O, те надо установить дна флажка - SMBus и Enable Crossbar, после
Глава 3. Проектирование аппаратных и программных средств Процессор Внутренняя память данных slave address R0 [ PNT ЗОН 31Н 32Н ЗЗН instruction data byte a) Подпрограмма WRITEDP (WRITE DP ) г1 —— PNT=30H Подпрограмма обработки прерывания SMBus г 2—1---- Передать START Ждать прерывание б) Рис. 3.19. Управление цифровыми потенциометрами по тине SMBus: а) анализ залами; б) граф-схема алгоритма.
3.4. Программирование контроллеров последовательной связи чего нажать кнопку ОК, что возвращает процесс к продолжению конфигурации SMBus. Нажатие кнопки конфигурации прерываний (Configure SMBus Interrupts) вызывает открытие окна конфигурации прерываний Interrupts. В этом окне надо установить флажок разрешения прерываний Enable SMBus Interrupt и нажать кнопку ОК. Для завершения конфигурирования необходимо нажать кнопку кон фигурации скорости передачи Configure SMBus Bit Rate, после чего открывается малое окно калькулятора (см. Рис. 3.20), в которое надо ввести требуемую такто- вую частоту, например 200000 Гц, затем нажать кнопку ОК. Нажатие кнопки ОК в окне SMBus завершает конфигурирование МК. После этого код конфигурации, сохраненный в файле SMBus conf, содержит четыре подпрограммы: конфигура ции источников сброса, конфигурации SMBus, конфигурации ввода/вывода и конфигурации прерываний. SMBus SMBus | SMBus Enable I*/ Enable SMBus Timeout Detection Г Enable SCL Timeout Detection SMBus Interrupt SMBus Interrupt is Enabled Configure SMBus Interrupts j Г" Enable Free Timeout Detection SMBus on the Crossbar SMBus is Enabled on the Crossbar Configure Pott 1/0 SMBus Clock Rale SMBOCR Value (Hex] | FD Bit Rate from SMBOCR Hz SCL Low T ime is 1.5000 us SCL High Time is 31250 us Configure SMBus Bit Rale SMB0CN -0x40; SMBOCR -OkFD; Cancel Resel Puc. J.20. Управление цифровыми потепшюмеграми но нише SMBus: конфигурация МК
Глава 3. Проектирование аппаратных и программных средств Исходный код для данной задачи, сохраненный под именем SMBus, приведен ниже. ; Задача 16: Управление цифровыми пртенциометрами по шине SMBus ;SMBus.ASM ;--------------- Глобальные/локальные переменные ---- $INCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) . Константы PNT equ RO ; Указатель буфера IDLE_M equ 00000001b ; Маска режима IDLE ; Сегменты my_stack segment idata rseg my_stack ds lOh ISEG AT ЗОН slave_address:ds 1 ; Адрес ведомого instruction: ds 1 ; Команда data_byte: ds 1 ; Байт данных b_seg SEGMENT BIT RSEG b_seg SMB_ERR: DBIT 1 ; Слаг ошибки SMBus cseg at 0 f org LJMP org Ijmp org OOh Config 003Bh SMB_ISR 0B3h ; Вектор сброса ; Вектор SMBus ; Конец области прерываний t Config: mov Icall clr clr setb sp,#my_stack-l ; Инициализация стека Init_Device ; Вызов подпрограммы конфигурации SMB_ERR ; Очистка флага ошибки SMBus SI ; Очистка флага прерывания SMBus ЕА ; Разрешить прерывания / sjmp $ WRITE_DP: wait: mov PNT,#30H ; 1.Указатель PNT = ЗОН setb STA ; 2.Передать START orl PCON,#IDLE_M ; 3.Установить режим IDLE jnb STO,wait ; 4.Бит STOP =1? ret SMB_ISR: mov a.SMBOSTA ; SI.Передано?
3.4. Программирование контроллеров последовательной связи anl a,#08H jz S6 cjne PNT,#33H,S4 ; S2.PNT = ЗОН? setb STO ; S3.Передать STOP sjmp S8 S4: mov SMBODAT,@PNT ; S4.Передать BYTE inc PNT ; S5.Инкремент PNT sjmp S8 S6: setb SMB_ERR ; S6.Установить флаг SMB_ERR setb STO ; S7.Передать STOP S8: clr SI ; S8.Очистить флаг прерывания SMBus reti END В разделе «Константы» присвоено символическое имя указателя PNT регист- ру R0 и определена маска для установки режима IDLE. В разделе «Сегменты» и соответствии с Рис. 3.19,а определен переместимый сегмент IDATA, содержащий байты slave address, instruction и databyte, а также переместимый сегмент BIT, содержащий флагошибки. В разделе «Векторы прерываний» в дополнение ктра диционному вектору сброса определен вектор SMBus в соответствии с Табл. 1.4. В разделе «Код инициализации» в дополнение к традиционным командам добавле- ны команды очистки флагов ошибки и запроса прерывания, а также команда гло бального разрешения прерывания. Раздел «Главная программа», как и в предыду- щем примере, содержит только «заглушку» — команду бесконечного цикла. Ре альная главная программа, как было указано выше, должна содержать функции процессора по загрузке байтов в буфер и команду вызова подпрограммы WRITEDP. Структура кода, приведенного в разделах «Подпрограммы» и «Под программы обработки прерываний», полностью соответствует граф-схеме алго ритма Рис. 3.19,6. Подробные комментарии позволяют легко понять, какие ко манды используются для кодирования операторов алгоритма. Следует пояснить, что для проверки корректности передачи можно ограничиться проверкой только 3-го бита байта состояния, так как коды корректных состояний содержат лош ческую 1 в этом бите: 08Н, 18Н, 28Н (см. Табл. 1.6). Задача 17. Написать подпрограмму для обновления информации насветодио дном дисплее на 8 знакомест (Рис. 3.21,а) через шину SPL Микросхема контрол лсра-драйвера МАХ7219 работает в декодирующем режиме. Отображаемая ин формация хранится во внутренней памяти данных микроконтроллера в неупако наймом двоично-десятичном коде (Unpacked BCD format), начиная с адреса 5011 Для управления светодиодным дисплеем используется микросхема МАХ7219 фирмы MAXIM |5|. На Рис. 3.21,6 приведены таблицы кодирования адреса (ADDRESS) внутренних регистров (REGISTER) микросхемы для каждого знако- места дисплея (Digit 0...Digit 7) и кодирования десятичных цифр. Из анализа дан- ных этих таблиц можно 1аключить, что если присвоит!, неопределенным бигам (символ X) н1ачепне 0, го адрес шакоместа представляет собой двоичный коде десятичным значением oi 1 до 8, а код десятичной цифры соответствует неупако-
Глава 3. Проектирование аппаратных и программных средств а) ADDRESS Десятичный код REGISTER D15... D12 D11 D10 D9 D8 No-Op X 0 0 0 0 XO Digit 0 X 0 0 0 1 XI Digit 1 X 0 0 1 0 X2 Digit 2 X 0 0 1 1 X3 Digit 3 X 0 1 0 0 X4 Digit 4 X 0 1 0 1 X5 Digit 5 X 0 1 1 0 X6 Digit 6 X 0 1 1 1 X7 Digit 7 X 1 0 0 0 X8 7-сегментный символ REGISTER DATA D7* D6...D4 D3 D2 D1 DO 0 X 0 0 0 0 1 X 0 0 0 1 ! 2 X 0 0 1 0 3 X 0 0 1 1 4 X 0 1 0 0 5 X 0 1 0 1 6 X 0 1 1 0 7 X 0 1 1 1 8 X 1 0 0 0 9 X 1 0 0 1 * Место десятичной точки указывается установкой бита D7 = 1 б) D15 D14 D13 012 D1l|oio| 09 06 07 | 06 | 05 | D4 | 03 | 02 | 01 | DO X X X X Адрес C3P Данные M3P В) LOAD MOSI fl<------------------------- Фрейм --------------------------------->|_ Ф Запись-^, ;Г-1;_____________________j- ,, j — пауза ; ; ; |Address=l| Digit0~~| |Address=2| Digit 1 | ••• |Address=8| Digit7 | | Прерывания —d I I SPI Puc. 3.21. Управление светодиодным дисплеем ио шине SPI: а) схема системы; б) кодирование адреса и данных; в) форма, передачи; г) временные диаграммы фрейма.
3.4. Программирование контроллеров последовательной связи ванному двоично-десятичному формату. На Рис. 3.21,в представлен 16-битный формат команды для обновления значения одной десятичной цифры. Старший байт формата является адресом знакоместа, а младший — кодом цифры. На Рис. 3.21,г представлены временные диаграммы фрейма передачи для обновле ния информации на экране дисплея с использованием шины SPI (диаграмма для тактового сигнала SCK/CLK не показана). Фрейм включает 8 команд обновления значений десятичных цифр. В начале передачи устанавливается активный низ кий уровень на линии LOAD, который здесь соответствует сигналу выбора вело мого шины SPI (см. п. 1.9.2 на стр. 84). После передачи каждого слова необходи мо произвести запись принятой информации в адресованный регистр драйвера. Для этой цели, как показано на рисунке, необходимо сформировать положитель ный фронт сигнала LOAD. Таким образом, после передачи каждой пары байтов необходимо делать паузу и формировать короткий положительный импульс па линии LOAD. Контроллер интерфейса SP1 МК работает в режиме ведущего и формирует запрос прерывания после завершения передачи очередного байта, как это показано стрелками на Рис. 3.21,г. Эти запросы могут быть обслужены пол программой обработки прерывания путем загрузки и инициирования передачи очередного байта, а также для формирования пауз и импульсов. Запрос прерыва ния для передачи первого байта может быть установлен программно. Структура данных для рассматриваемой задачи обновления информации на экране светодиодного дисплея приведена на Рис. 3.22,а. Во внутренней памяти данных типа IDATA, в абсолютном сегменте, начинающемся с абсолютного адре са 50Н, необходимо разместить буфер с двоично-десятичными кодами отображ i емых цифр. Кроме этого в переместимом сегменте типа BIT необходимо размес- тить два флага: флаг занятости буфера BUSY и флаг идентификации передаваемо го байта адрес/данные A_D. Регистры управления процессом лучше всего разместить в одном из рабочих банков, например в банке 1. Это — указатель бу фера PNT (R0), счетчик адреса ADDR (R1) и переменная отсчета времени TIMI (R2). Для доступа к этим регистрам внутри подпрограммы обработки прерывания используется регистровая адресация, а для доступа из внешних программ — при мая (адреса 08Н, 09Н, ОАН). Предлагаемая для решения задачи граф-схема алгоритма представлена па Рис. 3.22,6. Функция обновления информации на светодиодном дисплее UPDATE D содержит оператор инициализации (1) и блок «Старт фрейма», включающий операторы очистки битов LOAD, A_D (2) и установки битов BUSY, SPIF. Последний бит — это флаг запроса прерывания SPL Все дальнейшие функции выполняются внутри подпрограммы обработки прерывания SPI ISR. Граф-схема этих функций, представленная на том же ри супке, содержит стандартные операторы сброса флага прерывания, запоминания и восстановления регистра PSW, переключения банка регистров (SI, S2, S13). Пчеле переключения банка регистров проверяется условие завершения фрейма (S3), п если оно истинно, то выполняется блок «Конец фрейма», включающий оператор установки бита I OAD (S4) и очистки бита занятости BUSY (S5). Если оно ложно, то проверяйся сосюяние бига адрес/данные А I). Если A D * 1 (S6) и ука кнель определяет первую цифру (Digit 0), т. е PN'I SOI I (S7), го выполни
Глава 3. Проектирование аппаратных и программных средств Внутренняя Процессор Банк 1 память данных IDATA BIT R0(08H) PNT 50H Digit 0 | BUSY | R1 (09Н) ADDR 51H Digit 1 R2(0AH) TIME * * * I А-D I 57H Digit 7 58Н а) Подпрограмма UPDATED ( SPIJSR ) Подпрограмма обработки прерывания SPI S1 I Сбросить SPIF Запомнить PSW Переключить банк регистров S3 Да (-S4- Установить бит LOAD NT 58H7 Г 55—*----- Очистить бит BUSY S6 S7 Да A D=1? He PNT=50H? SIC LOAD = 1 Задержка LOAD = 0 -S8 т~ SPI0DAT = ADDR S9 I Инкремент ADDR, A D = 1 Г Пауза -ST^-----; SPI0DAT = @PNT S12 I Инкремент PNT, A D = 0 S2_t Конец фрейма Послать адрес Послать байт Put. 3.22. Управление светодиодным дисплеем по типе SPI: а) анализ задачи; б) граф-схема алгоритма.
3.4. Программирование контроллеров последовательной свпз ется блок «Послать адрес», включающий операцию пересылки содержимого счет чика адреса ADDR в регистр данных контроллера SPI для передачи (S8), поел которой производится инкремент счетчика адреса и установка флага A_D (S9) Если же указатель определяет не первую цифру, то перед блоком «Послать адрес выполнятся блок «Пауза», включающий операции формирования импульса и линии LOAD (S10). Если же A D = 1 (S6), то выполняется блок «Послать байт» включающий операцию пересылки байта очередной цифры из буфера в регист| данных контроллера SPI для передачи (SI 1) с последующим инкрементом указа теля PNT и очисткой бита A_D (S12). Конфигурирование МКдля данной задачи включает запрет сторожевою i.iii мера (см. описание к задаче 1) и конфигурирование контроллера SPI0, а также со путствующих узлов: прерываний и портов ввода/вывода. Для этого с помощьк мастера конфигурации (Configuration Wizard 2) можно открыть окно Enhance» Serial Peripheral Interface, как показано на Рис. 3.23. В этом окне нужно усi то Enhanced Serial Peripheral Interface r*l SPI0 | SPI Enable I*' Enable SPIO SPI Mode Operate in Slave Mode '• Operate in Master Mode SPI Interrupt SPIO Inteirupt is Enabled Configure SPI Interrupts | Clock Rate for SPI SPI Dock Phase Data Centered on First Edge of SCK Data Centered on Second Edge of SCK Hz | Change SCK S PI OCKR Value (Hex) | 01 SPI on the Crossbar SPI Cock Polarity (* SCK Line Low in Idle Slate SCK Line High in Idle State SPIO is Enabled on the Dossbar Configure Port I/O SPIOCN =0x03, SPIOCKR =0x01, Cancel | Reset CalculateSCK SYSCLK Frequency Hz Target SCK Frequency JSOQOaO! Hz Change Clock Frequency j | OK Cancel | Puc. 3.23. Управление свеншиодпым дисплеем по шине SPI: коп»|>пгурация МК
Глава 3. Проектирование аппаратных и программных средств нить флажок разрешения Enable SPIO и выбрать опцию режима ведущего Operate in Master Mode. Нажатие кнопки конфигурации прерываний (Configure SPI Interrupts) вызывает открытие окна конфигурации прерываний Interrupts. Там на- до установить флажок разрешения прерываний Enable SPIO Interrupt и нажать кнопку ОК. Далее следует нажать кнопку конфигурации скорости передачи Change SCK, после чего открывается малое окно калькулятора (см. Рис. 3.23), в которое надо ввести требуемую тактовую частоту, например 500000 Гц, затем на- жать кнопку ОК. Нажатие на кнопку Configure Port I/O открывает окно конфигу- рации портов Port I/O, где надо установить два флажка — SPIO и Enable Crossbar, а также выбрать двухтактный режим для вывода Р1.1 (опция Р в строке Push- Pull/Open Drain), после чего нажать кнопку ОК. Нажатие кнопки ОК в окне Enhanced Serial Peripheral Interface завершает конфигурирование МК. После это- го код конфигурации, сохраненный в файле SPI conf, содержит четыре подпро- граммы: конфигурации источников сброса, конфигурации SPI, конфигурации ввода/вывода и конфигурации прерываний. Исходный код для данной задачи, сохраненный под именем SPI, приведен ниже. Задача 17: Управление светодиодным дисплеем по пине SPI ,-SPI.ASM ;--------------- Глобальные/локальные переменные ----- SINCLUDE(C8051F020.INC) Файл с определениями для МК extrn code (Init_Device) ------ Константы - PNT equ R0 ; Указатель PNT_ equ 08H ADDR equ Rl ; Адрес ADDR_ equ 09H TIME equ R2 ; Время LOAD equ Pl.l ; Выбор ведомого f — Сегменты - — my_stack segment idata rseg my_stack ds lOh ISEG AT 50H ds 8 ; Буфер данных b_seg SEGMENT BIT RSEG b_seg BUSY: DBIT 1 ; Флаг Busy (буфер занят) A_D: DBIT 1 ; Адрес/Данные (Address/Data) cseg at 0 t org OOh ; Вектор сброса LJMP Config org 0033h ljmp SPI_ISR ; Ги-ктор SPI
3.4. Программирование контроллеров последовательной связ org 0B3h Конец области прерываний Config: mov Icall clr clr setb sp,#my_stack-l ; Инициализация стека Init_Device ; Вызов подпрограммы конфигурации BUSY ; Очистка флага Busy SPIF ; Очистка флага прерывания SPI ЕА ; Разрешить прерывания » sjmp $ UPDATE_D: mov PNT_,#50H ; 1.PNT = 50H, ADDR = 01H mov ADDR_,#01H clr LOAD ; 2.Очистить биты LOAD, A_ clr A_D setb BUSY ; 3.Установить биты BUSY, setb SPIF ret D SPIF SPI_ISR: S6: S8: S10: 311: SI 3: using 1 clr SPIF ; SI.Сбросить SPIF, запомнить PSW push psw clr RSI ; S2.Переключить банк регистров setb RSO cjne PNT,#58H,S6 ; S3.PNT = 58H? setb LOAD ; S4.Установить бит LOAD clr BUSY ; S5.Очистить бит BUSY sjmp S13 jb A_D,S11 ; S6.A_D = 1? cjne PNT,#50H,S10 ; S7.PNT = 50H? mov SPIODAT,ADDR ; S8.SPI0DAT = ADDR inc ADDR ; S9.Инкремент ADDR, A_D = 1 setb A_D sjmp S13 setb LOAD ; SI0.LOAD = 1, Задержка, LOAD = 0 mov TIME,#100 djnz TIME,$ clr LOAD sjmp S8 mov SPI0DAT,@PNT ; S11.SPI0DAT = @PNT inc PNT ; S12.Инкремент PNT, A_D = 0 clr A_D pop psw ; S13.Восстановить PSW reti END
Глава 3. Проектирование аппаратных и программных средств В разделе «Константы» присвоены символические имена указателя PNT, счетчика адреса ADDR и переменной отсчета времени TIME регистрам RO, R1 и R2. Кроме того, даны символические обозначения PNT_, ADDR_ абсолютным адресам указателя и счетчика, а также присвоено символическое имя LOAD вы- воду порта Р1.1 (см. Рис. 3.21,а). В разделе «Сегменты» в соответствии с Рис. 3.22,а определен переместимый сегмент IDATA, в котором зарезервирова- ны 8 байт для сохранения неупакованных двоично-десятичных кодов отобража- емых цифр, а также переместимый сегмент BIT, содержащий флаги. В разделе «Векторы прерываний» в дополнение к традиционному вектору сброса опреде- лен вектор SPI в соответствии с Табл. 1.4. В разделе «Код инициализации» в до- полнение к традиционным командам добавлены команды очистки флагов заня- тости буфера и запроса прерывания, а также команда глобального разрешения прерывания. Раздел «Главная программа», как и в двух предыдущих примерах, содержит только «заглушку» — команду бесконечного цикла. Реальная главная программа должна содержать функции процессора по загрузке двоично-десяти- чных кодов в буфер и команду вызова подпрограммы UPDATE D. Структура кода, приведенного в разделах «Подпрограммы» и «Подпрограммы обработки прерываний», полностью соответствует граф-схеме алгоритма Рис. 3.22,6. Под- робные комментарии позволяют легко понять, какие команды используются для кодирования операторов алгоритма. В качестве пояснения нужно отметить, что в подпрограмме UPDATE D для обращения к указателю и счетчику адреса ис- пользована прямая адресация (PNT_, ADDR ), а внутри подпрограммы обслу- живания прерывания SPI ISR, использующей банк регистров 1, — регистровая (PNT, ADDR). Следующие два примера использования МК решают задачу подключения мощных электромеханических исполнительных устройств и управления ими. 3.5. Управление мощными нагрузками Задача 18. Написать подпрограмму управления шаговым электродвигателем станка для изготовления проводов заданной длины (Рис. 3.24,а). Входной пара- метр WIRE LNG — относительная длина провода — передается в подпрограмму через ячейку внутренней памяти данных. Частота синхронизации микроконтрол- лера 2 МГц. Станок для заготовки проводов (см. Рис. 3.24,а) работает следующим образом: провод с катушки протягивается на заданную длину с помощью подающего роли- ка, приводимого в движение шаговым электродвигателем, после чего управляю- щий электродвигатель приводит в действие резак, возврат которого в исходное со- стояние фиксируется датчиком, затем цикл повторяется. Относительная длина провода задается в количестве шагов электродвигателя и составляет от 1 до 255. Совершенно очевидно, что для управления от МК такой мощной нагруз- кой, как электродвигатель, необходим специальный драйвер. В последние годы благодаря совершенствованию ингпральпых технологий на рынке электрон пых компонентов появились микросхемы драйверов шаговых элсктродвпгате-
3.5. Управление мощными нагрузками Катушка с проводом Подающий ролик OCDa OCDB Эксцентрик VSA EN CONTROL SENSCi PWM MASKING RESET VRLf-A, CW/CCW' ЯСд _B RIP-GE AJ 10В 5B BBLQGfBJ 6) VOLTAGE REGULATOR STEPPING SEQUENCE GENERATION CHARGE PUMP GATE LOGIC TERMAL PROTECTON KSH OUT1G ouna SENSEU VREFB PCb OUTlfi OUTlb SENSE^\- . COMPARATOR 7, Шаговый электродвигатель HALF/FULL CLOCK Резак Провод Управляющий электродвигатель OVER CURRENT DETECTION GATE LOGIC one Shot Mifwimix I MONOSTABLE TIME OVER CURRENT DETECTION /’uc. 3.24. Управление iii.iioui.im -hick i родни га гелем: а) схема станка для нарезания проводов, (>) (шок схема интегрированного драйвера.
Глава 3. Проектирование аппаратных и программных средств лей, которые кроме функции драйвера выполняют и функции формирования специальных сигналов, что упрощает управление шаговым двигателем со сторо- ны МК. Причем цена такого интегрального драйвера очень мало отличается от цены обычного драйвера, требующего для управления шаговым двигателем со стороны МК значительных ресурсов. Примером такой микросхемы является драйвер L6208 фирмы STMicroelectronics [6]. Функциональная схема L6208 при- ведена на Рис. 3.24,6. На кристалле драйвера размещены два МОП-транзистор- ных моста (BRIDGE A, BRIDGE В) управления обмотками шагового двигате- ля, включающие ШИМ-схемы (PWM) управления током, датчики перегрузки (OVER CURRENT DETECTION) и логику управления (GATE LOGIC). Кроме того, микросхема содержит генератор импульсной последовательности управле- ния шаговым двигателем (STEPPING SEQUENCE GENERATION), схему тем- пературной защиты (THERMAL PROTECTION) и другие узлы. Микросхема обеспечивает управление шаговыми электродвигателями, работающими от на- пряжения в диапазоне от 8 до 52 В с действующим значением тока потребления до 2.8 А. Рекомендуемая фирмой-изготовителем схема подключения драйвера к МК показана на Рис. 3.25. Подстроечный резистор R4 позволяет устанавливать до- пустимый порог тока в обмотках электродвигателя. Со стороны МК для управле- ния шаговым электродвигателем требуются только два сигнала: импульс STEP (шаг) и потенциал DIRECTION (направление). Эти сигналы подаются на соот- ветствующие входы драйвера CLOCK (синхронизация) и CW/CCW (по часовой стрелке/против часовой стрелки). Рис. 3.25. Управление шаговым электрод|11на1елсм: схема подключения к МК.
3.5. Управление мощными нагрузками Структура данных для решаемой задачи приведена на Рис. 3.26,а. В памяти типа DATA размещена входная переменная WIRE LNG, а в битовой области ре- гистров специальных функций SF BIT размещены два бита управления: STEP и DIRECTION в соответствии со схемой Рис. 3.25. DATA WIRELNG I I SF BIT STEP □ P2.7 DIRECTION □ P2.6 Puc. 3.26. Управление шаговым электродвигателем: а) структура данных; 6) граф-схема алгоритма. Граф-схема алгоритма для заданной функции протяжки провода WIREFEED показана на Рис. 3.26,6. В результате работы функции необходимо получить «пач ку» импульсов размером WIRE LNG. Структура алгоритма представляет собой цикл, внутри которого формируется импульс длительностью 1 мс (операторы 1, 2 и 3) и пауза 10 мс (4). Завершение цикла обеспечивается декрементированием не ременной WIRE_LNG (5) и проверкой результата на 0 с возвратом к началу цик • ла, если проверка дает ложное значение (6). Конфигурирование МК для данной задачи включает запрет сторожевого гай мера (см. описание к задаче 1), а также конфигурирование портов ввода/вывода и таймеров. Для этого с помощью мастера конфигурации (Configuration Wizard 2) можно открыть окна Port I/O и Timers, как показано на Рис. 3.27. В окне Port I/O необходимо выбрать двухтактный режим для выводов Р2.6 и Р2.7 (опция Р в сгро ке Push-Pull/Open Drain) и установить флажок Enable Crossbar. В окне Timers можно выбрать опцию Tinier Mode: 16 Bit Counter/Timer на вкладке Timer 0. Пог - ле завершения конфигурирования код, сохраненный в файле StepMotor _сопГ, содержит три подпро1рамм1.1: конфигурации источников сброса, конфигурации ыймеров и конфигурации пиоди/пынода.
Глава 3. Проектирование аппаратных и программных средств Рис. 3.27. Управление шаговым > гекгродвнгателсм: конфигурация МК
3.5. Управление мощными нагрузками Исходный код для задачи управления шаговым электродвигателем, сохранен- ный под именем StepMotor, приведен ниже. ; Задача 18: Управление шаговым электродвигателем ; StepMotor.ASM ;---------------Глобальные/локальные переменные------ $INCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init—Device) — Константы - — STEP equ P2.7 ; Шаг DIRECTION equ P2.6 ; Направление i — Сегменты - — my_stack segment idata rseg my_stack ds lOh m.y_data segment data rseg my_data WIRE_LNG: ds 1 ; Длина провода cseg at 0 r — Векторы прерываний org OOh ; Вектор сброса LJMP Config org 0B3h ; Конец области прерываний r Config: mov sp,#my_stack-1 ; Инициализация стека Icall Init—Device Вызов подпрограммы конфигурации clr STEP ; Очистка управляющих битов clr DIRECTION Главная программа Icall WIRE_FEED sjmp $ ;------------------------Подпрограммы---------------------------- WIRE_FEED: STEP ; 1.Установить бит STEP DelayIms ; 2.Задержка 1 мс STEP ; 3.Очистить бит STEP Delay10ms ; 4.Задержка 10 мс WIRE_LNG,WIRE—FEED ; 5.Декремент WIRE_LNG, 6.WIRE_LNG = 0? thO,# high (-1000/6); Инициализация таймера 0 tlO,# low (-1000/6); на 1000 мкс trO ; Пуск таймера 0 t f 0, $ ; Ожидание переполнения таймера О trO ; Стоп таймера О tfO ; Очистить флаг переполнения таймера О setb call clr call djnz ret Delay1ms: mov mov setb jnb clr clr ret
Глава 3. Проектирование аппаратных и программных средств Delay10ms: nov thO,# high (-10000/6 ; Инициализация таймера 0 mov tlO,# low (-10000/6); на 10000 мкс setb' trO ; Пуск таймера 0 jnb tfO,$ ; Ожидание переполнения таймера 0 clr trO ; Стоп таймера 0 clr tfO ; Очистить флаг переполнения таймера 0 ret END В разделе «Константы» присвоены символические имена STEP и DIRECTION выводам порта 2: Р2.7 и Р2.6. В разделе «Сегменты» в соответствии с Рис. 3.26,а определен переместимый сегмент DATA, в котором зарезервирован 1 байт для переменной WIRE LNG. В разделе «Код инициализации» в дополнение к традиционным командам добавлены команды очистки управляющих битов. Раздел «Главная программа», как и в предыдущих примерах, содержит только «за- глушку» — команду бесконечного цикла. Реальная главная программа должна со- держать среди других функций управления станком команды загрузки параметра W1RE_LNG и вызова подпрограммы WIRE FEED. Структура кода, приведенно- го в разделе «Подпрограммы», полностью соответствует граф-схеме алгоритма Рис. 3.26,6. Код имеет иерархическую структуру: подпрограмма WIREFEED со- держит вызовы подпрограмм задержки Delaylms и DelaylOms. Последние исполь- зуют таймер 0 в режиме опроса (поллинга) флага переполнения. Делитель 6, ис- пользованный в выражениях для начальных значений таймера, получен с учетом источника синхронизации таймера SYSCLK/12 и частоты SYSCLK = 2 МГц. Под- робные комментарии позволяют легко понять, какие команды используются для кодирования операторов алгоритма. Задача 19. Написать программу для разомкнутой системы управления скоро- стью потолочного вентилятора (Рис. 3.28,а). Частота синхронизации микроконт- роллера 2 МГц. Потолочный вентилятор фирмы Small Power Systems построен на базе элект- родвигателя постоянного тока, питающегося от напряжения 12 В. Спецификация электродвигателя приведена на том же рисунке. Разомкнутая система управления скоростью потолочного вентилятора имеет две кнопки управления: «Уменьшить» (Decrease) и «Увеличить» (Increase). Время удержания соответствующей кнопки в нажатом состоянии позволяет задавать величину изменения скорости. Результат управления оценивается пользователем визуально. Для управления электродвигателем вентилятора можно использовать драйвер LMD18201 [7] фирмы National Semiconductor, рассчитанный на напряжение до 55 В и ток до ЗА. Структурная схема драйвера приведена на Рис. 3.28,6. Драйвер представляет собой МОП-транзисторный мост, снабженный входной логикой (INPUT LOGIC) и защитными схемами по току, напряжению и температуре (OVERCURRENT DETECTION, UNDERVOLTAGE LOCKOUT, THERMAI SENSING) Первые две схемы lanuimaioi мост апнар пно, формируя сигнал oi ключепия SHUTDOWN. Третья схема формирует флаг, значение которого можно
3.5. Управление мощными нагрузками Спецификация электродвигателя (Decrease) (Increase) Скорость Малая Средняя Большая Напряжение [В] 5 5 8 5 12.7 Ток [А] 0.22 0.41 0.72 j^National Semiconductor BOOTSTRAP 2 BOOTSTRAP 1 Vs OUTPUT 2 OUTPUT 1 THERMAL FLAG OUTPUT DIRECTION 3 BRAKE 4 PWM5 SIGNAL GND B) Puc. J 2ft. Управление шектродвигателем постоянного тока: a) устронсию управлении no nxio-iin.iM вентилятором; б) структурная схема драпвера; в) схем;! подключения тлсктродиигятеля нос шинною тока к МК
Глава 3. Проектирование аппаратных и программных средств оценить на выходе THERMAL FLAG OUTPUT. Драйвер имеет три входа управле- ния: DIRECTION (направление), BRAKE (тормоз), PWM (ШИМ). Схема системы управления вентилятором приведена на Рис. 3.28,в. Три бита порта О (Р0.2, Р0.1, Р0.0) обеспечивают формирование вышеуказанных управля- ющих сигналов, а три других бита (РО.З, РОД, Р0.5) используются как входы тем- пературного флага и состояния кнопок управления DECREASE и INCREASE. Все эти сигналы имеют низкий активный уровень. Учитывая значительную вели- чину сопротивления внутренних «подтягивающих» резисторов, на каждый из этих входов рекомендуется устанавливать внешние резисторы, которые на схеме не показаны. Для управления скоростью вращения электродвигателей постоянного тока используют ШИМ питающего напряжения. Для генерирования сигнала управле- ния драйвера ШИМ можно использовать, например, модуль 0 программируемого массива счетчиков РСАО, работающий в режиме 8-битного ШИМ (см. Рис. 1.45). Из этой схемы можно заключить, что период следования импульсов ШИМ опре- деляется периодом синхронизации РСАО, деленным на 256. Коэффициент запол- нения импульсов ШИМ можно регулировать за счет изменения содержимого ре- гистра РСАОСРНО, которое определяет относительную длительность низкого уровня сигнала ШИМ. Опрос состояния кнопок управления можно производить 1 раз в секунду. В этом случае время удержания кнопки в секундах будет представлять собой отно- сительную величину требуемого изменения скорости. Кроме того, такой интер- вал позволит визуально наблюдать изменение скорости вращения вентилятора. Структура данных для управления электродвигателем постоянного тока при- ведена на Рис. 3.29,а. Переменная LOW TIME, определяющая относительную длительность низкоуровневой фазы импульсов ШИМ, размешается непосредс- твенно в регистре РСАОСРНО, являющемся одним из регистров специальных функций МК. Все битовые сигналы также размещены непосредственно в бито- вой области регистров специального назначения в соответствии со схемой Рис. 3.28,в. Двухбайтовую переменную отсчета времени 1 секунда (ONE HzL и ONE_HzH) можно разместить во внутренней памяти МК в сегменте DATA. Поскольку управление электродвигателем реализуется в основном за счет ап- паратных ресурсов РСАО. целесообразно весь алгоритм управления сосредото- чить в подпрограмме обслуживания прерывания PCA_1SR, как это показано на Рис. 3.29,6. Частота вызова этой подпрограммы равна частоте ШИМ — PWM Frequency. При работе МК с частотой синхронизации 2 МГц и использовании нредделителя на 12 для синхронизации РСАО эта частота составит, как показано на рисунке, 651 Гц, что вполне приемлемо. Кроме традиционного оператора очистки флага прерывания (1), алгоритм включает в себя ряд проверок и соот- ветствующих действий. Если температурный флаг установлен (2), то выдается сигнал на торможение и останов электродвигателя (10). Если очередное прерыва- ние не попадает в сетку частоты 1 Гц (3), то выполнение операций завершается. Иначе производятся проверки состояния кнопок управления. Если нажата кноп- ка Decrease (4) и переменная LOW TIME не дошла еще до значения 138 (5), го производится ее инкрементирование (8) и, как следствие, уменьшение скорости
3.5. Управление мощными нагрузками SF REGISTERS IOW_TIMPl~ I РСАОСРНО SFBIT PWM □ РО.О BRAKE □ P0.1 DIRECTION □ P0.2 TH FLAG □ P0.3 DECREASE □ P0.4 INCREASE □ P0.5 DATA ONE HzL I I ONE HzH I I Рис. 3.29. Управление электродвигателем постоянного тока: а) структура данных; б) граф-схема алгоритма. электродвигателя. Если нажата кнопка Increase (6) и переменная LOWT1ME не дошла еще до значения I (7), то производится ее декрементирование (9) и, как следствие, увеличение скорости электродвигателя. Предельное значение LOWTIME = 1 соответствует коэффициенту заполнения ШИМ, близкому к 1, и, следовательно, действующее значение напряжения управления двигателя будет приблизительно равно питающему 12 В, что соответствует максимальной скоро сти. Второе предельное значение рассчитывается с учетом минимального управ ляющего напряжения 5.5 В (см. Рис. 3.28,а) и соответствует минимально допусти мой скорости: LOW TIME = 256-( 12 - 5.5)/12 = 138.66. Конфигурирование МКдля данной задачи включает запрет сторожевою гаи мера (см. описание к задаче 1), конфигурирование программируемого массив i счетчиков РСАО и портов ввода/вывода. Для этого с помощью мастера конфшу рации (Configuration Wizard 2) можно открыть окно Programmable Counter Array В этом окне на вкладке РСАО необходимо установить флажок Enable РСАО. Путем нажатия кнопки конфигурации прерываний Configure РСА Interrupts в открыв тсмся окис конфигурации прерываний установить флажок Enable РСА Interrupt п нажать кнопку ОК. Затем па вкладке Module 0, как показано на Рис. 3.30, пуж ио выбрать опцию режима 8-бггиюго ШИМ — 8-Bit Pulse Width Modulator. Путем
Глава 3. Проектирование аппаратных и программных средств Programmable Counter Array ... РСАО Module 0 | Module 1 | Module 21 Module 3 | Module 4 | Capture/Compare Modules None Capture on positive edge of CEXO Capture on negative edge of CEXO Г* Capture on transition of CEXO Г' Software Timer High Speed Output f ‘ Frequency Output й В- В it Puls e Width M odulator C 16-Bit Pulse Width Modulator РСА Capture/Compare Register (Hex) РСАОСРНО (High Byte): 45 FCAOCPLO (Low Byte): poo" CEXO on the Crossbar CEXO is Enabled on the Crossbar | Configure Port I/O | Duty Cycle- Change D uty Cycle | Capture/Corripare Interrupt Enable P Enable CCF Interrupt PCAOCN = 0x40; PCA0CPM0 =0x43; РСАОСРНО =0x45; OK Cancel Reset Put. 3.30. Управление электродвигателем постоянного тока: конфигурация МК.
3.5. Управление мощными нагрузками нажатия кнопки изменения коэффициента заполнения ШИМ Change Duty Cycle установить начальное значение, соответствующее средней скорости вращения электродвигателя, — 73%. Кроме того, нужно установить флажок Enable CCI Interrupt, после чего нажать на кнопку Configure Port I/O. В открывшемся окне Port I/O (см. Рис. 3.30) необходимо установить флажок РСА СЕХО, выбрать двух тактный режим для выводов Р0.0, Р0.1, Р0.2 (опция Р в строке Push-Pul 1/Open Drain) и установить флажок Enable Crossbar. Нажатие кнопок ОК в окне Port I/O, затем в окне Programmable Counter Array завершает конфигурирование. После этого код, сохраненный в файле DCMotor conf, содержит четыре подпрограммы: конфигурации источников сброса, конфигурации РСА, конфигурации ввода/вы вода и конфигурации прерываний. Исходный код для задачи управления электродвигателем постоянного тока, сохраненный под именем DCMotor, приведен ниже. Задача 19: Управление электродвигателем постоянного тока DCMotor.ASM . Глобальные/локальные переменные $INCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (lnit_Device) . Константы LOW_TIME equ PCA0CPH0 ; Время низкого PWM equ PO. 0 ; Импульсы ШИМ BRAKE equ PO. 1 ; Торможение DIRECTION equ P0.2 ; Направление TH_FLAG equ PO. 3 ; Температурный DECREASE equ PO. 4 ; Уменьшить INCREASE equ PO. 5 ; Увеличить уровня ШИМ флаг t my_stack c|_seg ONE_HzL: ONE_HzH: segment rseg ds SEGMENT RSEG ds ds cseg idata my_stack lOh DATA d_seg 1 ;Переменная для 1 at 0 отсчета цикла 1 Гц org LJMP org Ijmp org OOh ; Вектор сброса Config 04Bh PCA_ISR ; Вектор РСА 0B3h ; Конец области прерываний ^Config: mov Icall clr sp,#my_stack-l ; Инициализация стека Init_Devlco ; Вызов подпрограммы конфигурации PWM ; Очистить выходные биты
Глава 3. Проектирование аппаратных и программных средств clr BRAKE clr DIRECTION mov ONE_HzL,#low 651 ; Инициализировать цикл 1 Гц mov ONE_HzH,#high 651 setb EA ; Разрешить прерывания ----------- Главная программа ------------------------ sjmp $ --- Подпрограммы обработки прерываний ---------------- PCA_ISR: clr jnb CCFO TH_FLAG, set_br ; 1.Очистить флаг ; 2.TH_FLAG =0? CCFO onehz: djnz ONE_HzL, ext ; 3.1 Гц? djnz ONE_HzH, ext mov ONE_HzL, #low 651 mov ONE_HzH, #high 651 jb DECREASE ,incrz ; 4.Decrease? mov a,#138 ; 5,LOW_TIME =138 1? cjne a,LOW_TIME,inc_l incrz: jb INCREASE ,ext ; 6.Increase? mov a,#l ; 7.LOW_TIME =1? cjne a,LOW_TIME,dec_l sjmp ext inc_l: inc LOW_TIME ; 8.Инкремент LOW_ TIME sjmp ext dec_l: dec LOW_TIME ; 9.Декремент LOW_ TIME sjmp ext set_br: setb BRAKE ; 10.Установить BRAKE ext: reti END В разделе «Константы» присвоены символические имена переменным, раз- мещенным в регистрах специальных функций. В разделе «Сегменты» в соответс- твии с Рис. 3.29,а определен переместимый сегмент DATA, в котором зарезерви- рованы 2 байта для переменных ONE_HzL и ONEHzH. В разделе «Векторы прерываний» в дополнение к традиционному вектору сброса определен вектор РСА в соответствии с Табл. 1.4. В разделе «Код инициализации» в дополнение к традиционным командам добавлены команды очистки управляющих битов, инициализации переменных ONEHzL и ONE_HzH, а также команда глобаль- ного разрешения прерывания. Раздел «Главная программа» содержит только «за- глушку» — команду бесконечного цикла, так как все функции системы управле- ния скоростью реализуются в подпрограмме обработки прерывания. Структура кода, приведенного в разделе «Подпрограммы обработки прерывания», полно- стью соответствует граф-схеме алгоритма Рис. 3.29,6. Подробные комментарии позволяют легко понять, какие команды используются для кодирования опера- торов алгоритма. Следующие две задачи демонстрируют возможности МК по прямому управ- лению дисплеями различных типов.
3.6. Подключение светодиодных и жидкокристаллических дисплеев 3.6. Подключение светодиодных и жидкокристаллических дисплеев Задача 20. Написать подпрограмму для отображения двухразрядного десяти много числа на двухместном 7-сегментном светодиодном индикаторе. Упакован ный двоично-десятичный код (Packed BCD) отображаемого числа находится в одной из ячеек внутренней памяти данных. В качестве индикатора можно выбрать, например, экономичный двухместный светодиодный дисплей HDSP- К703 [8] фирмы Agilent Technologies, имеющий вы соту цифр 14 мм (см. Рис. 3.31,а), схему включения светодиодов «с общим като- дом» (Рис. 3.31,6) и рабочий ток сегмента — 5 мА. Такие параметры позволяю! подключить этот дисплей прямо к линиям портов вывода МК через резисторы ограничители тока, как показано на Рис. 3.31,в. HDSP- К703 в) Гис. 3.31. Управление иплика тором: а) двухмесппый светодиодный индикатор; б) uicKipii'iecKiiH схема, и) схема подключения индикаюра к МК
Глава 3. Проектирование аппаратных и программных средств Структура данных для данной задачи содержит один байт в сегменте DATA с упакованным двоично-десятичным кодом PACK BCD, как показано на Рис. 3.32,а. Решение задачи предусматривает, что в памяти программ находится таблица 7-сегментных кодов (Рис. 3.32,6), индексом которой является неупако- ванная двоично-десятичная цифра (Unpacked BCD). DATA PACK BCD I I I ^LED DISPLAY^ r- 1 —- Преобразовать старшую цифру в Unpacked BCD Преобра- зовать в 7- сегментный код Unpacked BCD 7-сегментный код DP А в с D Е F G 00 0 1 1 1 1 1 1 0 01 0 0 1 1 0 0 0 0 02 0 1 1 0 1 1 0 1 03 0 1 1 1 1 0 0 1 04 0 0 1 1 0 0 1 1 05 0 1 0 1 1 0 1 1 06 0 1 0 1 1 1 1 1 07 0 1 1 1 0 0 0 0 08 0 1 1 1 1 1 1 1 09 0 1 1 1 1 0 1 1 6) 1-4— Преобразовать младшую цифру в Unpacked BCD Q CONV7SEg)) I—С1 —— Переслать базовый адрес таблицы в DPTR г-С2- Читать код из таблицы Преобра- зовать в 7- сегментный код Рис. 3.32. Управление светодиодным индикатором: а) структура данных; б) таблица 7-сегментных кодов; в) граф-схема алгоритма. Граф-схема алгоритма функции отображения приведена на Рис. 3.32,в в иерар- хическом виде. Главная функция LED DISPLAY содержит две идентичных це- почки из трех операторов: преобразования цифры из упакованного формата в не- упакованный (1,4), преобразования в 7-сегментный код (2, 5) и вывода в соответ- ствующий порт (3,6). Функция преобразования в 7-сегментный код CONV 7SEG основана на алгоритме для просмотр а таблиц (см. описание к задаче 6).
3.6. Подключение светодиодных и жидкокристаллических дисплеев Конфигурирование МК для данной задачи включает запрет сторожевого таи мера (см. описание к задаче 1) и конфигурирование портов ввода/вывода Для этого с помощью мастера конфигурации (Configuration Wizard 2) можно открыть окно Port I/O и выбрать двухтактныГг режим для всех выводов портов Р1 и Р2 (он ция Р в строке Push-Pull/Open Drain), а также установить флажок Enable Crossbar. Нажатие кнопки ОК в окне Port I/O завершает конфигурацию. После этого код, сохраненный в файле LEDconf, содержит две подпрограммы: конфигурации ис точников сброса и конфигурации ввода/вывода. Исходный код для задачи управления светодиодным индикатором, сохранен ный под именем LED, приведен ниже. ; Задача 20: Управление светодиодным индикатором ;LED.ASM .--------------- Глобальные/локальные переменные ----------------- $INCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) .------------------------- Сегменты ------------------------------ my_stack segment idata rseg my_stack ds LOh d_seg SEGMENT DATA RSEG d_seg PACK_BCD: ds 1 /Упакованный двоично-десятичный код cseg at 0 Векторы прерываний org 00h ; Вектор сброса LJMP Config org 0B3h ; Конец области прерываний ;---------------------Код инициализации-------------------------- Config: mov sp,#my_stack-l ; Инициализация стека Icall Init_Device ; Вызов подпрограммы конфигурации I--------------------- Главная программа sjmp $ I------------------------ Подпрограммы - LtD_DISPLAY: mov а,РАГК_НСР 1.Преобразовать ст. цифру в Unpacked BCD swap а
Глава 3. Проектирование аппаратных и программных средств anl a,#0Fh call CONV_7SEG mov Pl, a mov a,PACK_BCD anl a,#0Fh call CONV_7SEG mov P2,a ret C0NV_7SEG: mov move ret dptr,#SEG_Tabl a,@a+dptr ; 2.Преобразовать в 7-сегментный код ; 3.Вывести в порт 1 ; 4. Преобразовать мл. цифру в Unpacked BCD ; 5.Преобразовать в 7-сегментный код ; 6. Вывести в порт 2 ; С1.Переслать адрес таблицы в DPTR ; С2.Читать код из таблицы ;-------------------------Таблицы----------------------------- SEG_Tabl: db 7Eh,30h,6Dh,79h,33h,5Bh,5Fh,70h,7Fh,7Bh END В разделе «Сегменты» в соответствии с Рис. 3.32,а определен переместимый сегмент DATA, в котором зарезервирован 1 байт для переменной PACK_BCD. Раздел «Главная программа» содержит только «заглушку» — команду бесконечно- го цикла, так как все функции управления светодиодным индикатором реализу- ются в подпрограмме. Структура кода, приведенного в разделе «Подпрограммы», полностью соответствует граф-схеме алгоритма Рис. 3.32,в. Подробные коммен- тарии позволяют легко понять, какие команды используются для кодирования операторов алгоритма. Для перестановки кодов цифр в упакованном двоично-де- сятичном коде используется команда свопинга ниблов swap. Задача 21. Написать комплект подпрограмм для обслуживания модуля двух- строчного жидкокристаллического дисплея со встроенным контроллером. Требу- емые функции: инициализация дисплея, очистка экрана, перемещение курсора и посылка байта данных в коде ASCII для отображения. В качестве индикатора можно выбрать, например, модуль двухстрочного мат- ричного жидкокристаллического дисплея L1672 [9] фирмы Seiko Instruments (Рис. 3.33,а), имеющий формат знакоместа 5x7 точек (Рис. 3.33,6). Модуль имеет 14 выводов, назначение которых указано в таблице, приведенной на Рис. 3.33,в. Упрощенная логическая структура дисплея показана на Рис. 3.34,а. Отобра- жаемые данные хранятся в памяти данных DD RAM объемом 128 байт в коде ASCII. Первые 64 байта памяти содержат информацию первой строки, вторые 64 байта — второй строки. Каждая строка дисплея имеет 16 позиций: 0...15. Таким образом, в каждый момент времени на экране дисплея отображается только чет- вертая часть информации, хранимой в памяти. Можно сказать, что экран дисплея представляет собой окно, которое можно двигать относительно памяти. Наибо лее простой способ использования такого дисплея — это постоянное расположи пис окна в крайнем левом положении. При этом на первой строке будут отобра жаться данные ячеек DD RAM с адресами OOII...OFH, а па второй строке — с адре
3.6. Подключение светодиодных и жидкокристаллических дисплеев Матрица 5x7 точек Курсор — □□ ппггпп Номер вывода Обозначение Назначение 1 Vdd Источник питания +5B 2 Vss Земля (общий) 3 VO Контраст 4 RS Выбор регистра 5 R/W Чтение/Запись 6 EN Разрешение 7 DO Шина данных — МЗР 8 D1 Шина данных 9 D2 Шина данных 10 D3 Шина данных 11 D4 Шина данных 12 D5 Шина данных 13 D6 Шина данных 14 D7 Шина данных — СЗР В) Рис. 3.33. Модуль жидкокристаллического дисплея LI672; а) внешний вид; б) формат шрифта; в) таблица выводов. сами 40H...4FH. Кроме того, логическая структура дисплея содержит 3 регистра: регистр данных DR (Data Register), регистр команды IR (Instruction Register) и счетчик адреса AC (Address Counter). Данные для отображения пересылаются п память DD RAM через регистр данных по адресу, содержащемуся в момент пере сылки в счетчике адреса. Такая пересылка в зависимости от режима сопровожда ется автоинкрементом/автодекрементом счетчика адреса. Если содержимое счет чика адреса соответствует отображаемой части памяти, то текущее значение адре- са можно видеть на экране как позицию курсора, при условии, что его отображение разрешено. Режимы работы дисплея устанавливаются путем посыл ки команд через регистр команд. Полный список команд, их коды и необходимые пояснения приведены в Табл. 3.2. В дисплее имеется также память знакогеисра гора CG RAM, в которую можно загружать национальные шрифты. Схема подключения дисплея L1672 к МК приведена на Рис. 3.34,6. Подстро- ечный резистор RI позволяет регулировать уровень контраста. Интерфейс дис- плея включает 8-битную шину данных, подключенную к соответствующим выво дам порта Р2, и три управляющих сигнала: разрешение EN (Enable), чтеиие/за пись R/W (Read/Write) и выбор регистра RS (Register Select). В отличие oi управляющих сигналов шина данных двунаправленная, организована по схеме «монтажное ИЛИ», поэтому для ее нормальной работы необходимы внешние ре шсгоры, подключенные к источнику питания +5 В (на схеме не показаны). Вре- менные диаграммы управляющих сигналов для цикла записи приведены на Рис. 3.34,в. Запись информации в регистры дисплея производится по отрица гель пому фронту сигнала разрешения EN. Из временной диаграммы следует также, то есть определенные ограничения па временные соотношения сигналов. Одна ко для МК, работающею па частоте 2 МГц (период синхронизации — 500 не), эти оф.шнчепня все)да выполняются
Глава 3. Проектирование аппаратных и программных средств + 5В — Ширина импульса EN — Время установления данных — Время удержания данных — Время установления сигналов управления — Время удержания сигналов управления 230 нс (min); 80 нс (min); 10 нс (min); 40 нс (min); 10 нс (min). В) Рис. 3.34. Управление жидкокристаллическим дисплеем: а) логическая структура дисплея; б) схема подключения; в) временные диаграммы. Граф-схемы алгоритмов заданных функций приведены на Рис. 3.35. Из Табл. 3.2 следует, что различные команды дисплея выполняются за разное время. Индикатором завершения соответствующей операции является обнуление флага занятости BUSY. Это значит, что целесообразно перед посылкой команд или дан пых проверять состояние этого флага при помощи предопределенного (т. е. офор- мленного в виде отдельной подпрограммы) процесса ожидания WAIT_BF (Wait BUSY Flag).
Таблица 3.2. Команды жидкокристаллического дисплея Команда RS R/W D7 D6 D5 D4 D3 D2 DI DO Функция Время выполнения Clear Display 0 0 0 0 0 0 0 0 0 1 Очистить дисплей и вернуть курсор на исходную позицию 1.64 мс Cursor Home 0 0 0 0 0 0 0 0 1 X Вернуть курсор, дисплей на исходную позицию 1.64 мс Entry Mode Set 0 0 0 0 0 0 0 I I/D s Установить режим: сдвиг курсора или дисплея после чтения/записи 40 мкс av ON/OFF Control 0 0 0 0 0 0 1 D C в Вкл./выкл. дисплей (D), курсор (С) и режим мигания (В) 40 мкс Dbptav or Cursor Shift 0 0 0 0 0 1 S/C R/L X X Сдвинуть курсор или дисплей без чтения/записи 40 мкс F«nct»onSet 0 0 0 0 1 DL N F X X Установить параметры интерфейса: длину данных (DL), число строк (N) и формат символов (F) 40 мкс Character Generator (CG) RAM Address 0 0 0 1 Address CG RAM Установить адрес памяти генератора символов для начала чтения/записи 40 мкс Display Data (DD) RAM Address 0 0 1 Address DD RAM Установить адрес памяти данных для начала чтения/записи 40 мкс Read BUSY Flag (BF) and Address 0 1 BF Address Counter Читать флаг BUSY и позицию курсора 40 мкс Write to CG or DD RAM 1 0 Write Data Запись данных в память генератора символов или память данных 40 мкс Read from CG or DD RAM 1 1 Read Data Чтение данных из памяти генератора символов или памяти данных 40 мкс Условные обозначения: I/D (Increment/Decrement) — инкремент/декремент ( 1 — инкремент, 0 — декремент), S (Shift) — сдвиг (1 — сдвиг дисплея, 0 — продвижение курсора), S/C (Display shift/Cursor move) — сдвиг дисплея/движение курсора (1 — сдвиг дисплея, 0 — движение курсора), R/L (Right/Left) — вправо/влево (1 — вправо, 0 - влево), DL (Data Length) — длина шины данных (1—8 бит, 0 — 4 бит), N (Number of lines) — количество строк (1—2 строки, 0 — 1 строка), F (Font) — формат шрифта (1 — 5 х 10 точек, 0 — 5x7 точек). 3,6. Подключение светодиодных и жидкокристаллических дисплеев
Глава 3. Проектирование аппаратных и программных средств Рис. 3.35. Управление жидкокристаллическим дисплеем: граф-схсмы алгоритмов подпрограмм обслуживания. Функция инициализации дисплея INIT LCD включает три команды. Первая из них — Function Set устанавливает параметры интерфейса: ширину данных 8 бит, число строк 2, формат символов 5x7 точек. По данным Табл. 3.2 нетрудно вычислить код команды 38Н. Вторая команда — Entry Mode Set устанавливает ре жим ввода: направление сдвига вправо (инкремент адреса) и сдвиг курсора, а не дисплея. Код команды, поданным Табл. 3.2, будет 06Н. И наконец, третья комап да инициализации — управление дисплеем Display Control включает дисплей и курсор в обычном режиме. Код команды, поданным Табл. 3.2, будет ОЕН. Функция очистки экрана CLEAR SCRN содержит только одну команду Clear Display (код команды 01Н). Функция перемещения курсора CURSOR_GO базируется па команде установки адреса памяти данных D play Data (DD) RAM
3.6. Подключение светодиодных и жидкокристаллических дисплеев Address. Поданным Табл. 3.2, шесть младших бит этой команды представляют со бой адрес памяти данных. Этот единственный параметр удобно передавать фупк ции через аккумулятор МК. Функция посылки байта данных для отображения SEND DATA реализуется с помощью команды записи в память данных Write to DD RAM (см. Табл. 3.2). Данные для пересылки удобно передавать этой функции также через аккумулятор. Общий для всех функций процесс ожидания WA1TBF сводится к выполие нию команды чтения флага BUSY — Read BUSY Flag and Address и проверке его состояния (см. Рис. 3.35). Конфигурирование МК для данной задачи включает запрет сторожевого гаи мера (см. описание к задаче 1) и задание конфигурации портов ввода/вывода. Для этого, с помощью мастера конфигурации (Configuration Wizard 2) можно открыть окно Port I/O и выбрать двухтактный режим для выводов портов Р1.0, Р1.1 и Р1.2 (опция Р в строке Push-Pull/Open Drain), а также установить флажок Enable Crossbar. Нажатие кнопки ОК в окне Port I/O завершает конфигурирование. Пос- ле этого код, сохраненный в файле LCD conf, содержит две подпрограммы: коп фигурации источников сброса и конфигурации ввода/вывода. Исходный код для задачи управления жидкокристаллическим индикатором, сохраненный под именем LCD, приведен ниже. Задача 21: Управление жидкокристаллическим дисплеем ;LCD.ASM ;---------------- Глобальные/локальные переменные ---------------- SINCLUDE(C8051F020.INC); Файл с определениями для МК •«xtrn code (Init_Device) I-------------------------Константы------------------------------- RS equ pl.2 ; Выбор регистра R_WR equ pl.l ; Чтение/Запись Г.Ы equ pl. 0 ; Разрешение BUSY equ p2.7 ; Флаг занятости BUSY -------------------------Сегменты-------------------------------- my_stack segment idata rseg my_stack ds lOh cseg at 0 I -------------------- Векторы прерываний ------------------------ org OOh ; Вектор сброса LJMP Config org 0B3h ; Конец области прерываний | Ь-------------------Код инициализации--------------------------- Config: mov sp,#my_stack-l ; Инициализация стека Icall Init_Device ; Вызов подпрограммы конфигурации clr EN ; Установить низкий уровень сигнала EN Кр'-------------------Главная программа--------------------------- | sjmp $ ------- - - Подпрограммы — -- ......---------
Глава 3. Проектирование аппаратных и программных средств INIT_LCD: call WAIT.BF ;Ждать флаг BUSY = 0 clr R_WR mov p2, #38h ;Function Set: Data Length = 8,2 Lines, ;Font 5x7 dots setb EN nop clr EN call WAIT_BF ;Ждать флаг BUSY = 0 clr RJWR mov p2,#06h ;Entry Mode Set: Increment Cursor, ;Don't Shift setb EN nop clr EN call WAIT_BF ;Ждать флаг BUSY = 0 clr R_WR mov p2,#0Eh ,-Display Control: Display ON, Cursor ON setb EN nop clr EN ret CLEAR_SCR: call WAIT_BF ;Ждать флаг BUSY = 0 clr RJWR mov p2, #01h ;Clear Display setb EN nop clr EN ret CURSOR_GO: call WAIT_BF ;Ждать флаг BUSY = 0 clr RJWR mov p2,a ;DD RAM Address = Cursor Position orl p2,#lCOOOOQOb setb EN nop clr EN ret SEND_DATA: call WAIT_BF ;Ждать флаг BUSY = 0 setb RS clr R_WR mov p2 ,a ;Write to DD RAM setb EN nop clr EN ret WAIT.BF
3.7. Подключение клавиату mov p2,#0ffh clr RS setb R_WR setb EN mov C,BUSY clr EN jc WAIT_BF ret ;Переключить порт в режим чтения ;Read BUSY Flag ;BF = 1? END В разделе «Константы» присвоены символические имена управляющих chi налов и флага занятости соответствующим выводам портов МК. В разделе «Ко, инициализации» добавлена команда для установки низкого исходного уровн; сигнала разрешения EN. Раздел «Главная программа» содержит только «заглуш ку» — команду бесконечного цикла, так как все заданные функции реализую гс в подпрограммах управления дисплеем. Структура кода, приведенного в раз icni «Подпрограммы», полностью соответствует граф-схеме алгоритма Рис. 3.35 Подробные комментарии позволяют легко понять, какие команды используют ся для кодирования операторов алгоритма. Поскольку перед выполнением каж дой команды вызывается подпрограмма WA1TBF, в которой бит RS обнуляете) (обращение к регистру команды 1R), необходимость его переустановки ест, только у функции SEND DATA (обращение к регистру данных DR). В теле под программы WAIT В F для переключения порта Р2 в режим считывания необхо димо установить все биты регистра порта в состояние логической I (см. и. 1.3. на стр. 84). Следующие три задачи демонстрируют возможности МК по прямому под ключению клавиатур различных типов с использованием различных интерфей сов, а также по расширению аппаратных ресурсов клавиатуры и подавлению эф фекта дребезга контактов. 3.7. Подключение клавиатур Задача 22. Написать подпрограмму для считывания данных с линейной кла и натуры, показанной на Рис. 3.36,а. ( Линейная клавиатура может быть непосредственно подключена к одному и' портов МК, как это показано на Рис. 3.36,6. Следует, однако, отметить, что niiyi ренние резисторы имеют сопротивление порядка 100 кОм, поэтому для повыше Ния быстродействия необходимо подключить более низкоомные внешние резне юры. Считывание данных с клавиатуры предполагает вычисление номера клави ши, который напечатан или выгравирован на поверхности кнопки. Эю можш сделать путем считывания состояний контактов клавиш параллельное последую щпм просмотром (сканированием) полученного двоичного кода для поиска пуле вого активного бита (см. Рис. З.Зб.а). В этом случае каждой клавише можно при споить так называемый кол сканирования SC (Scan Code), как это показано на Рис. 3.36,6.
Глава 3. Проектирование аппаратных и программных средств Внутренние 7 £ £ 4 2 £ £ О Чтение Направление сканирования а) г- резисторы / C8051F020 б) REGISTERS Номер клавиши сдвига KEY DATA BIT KEYFlag В) Рис. 3.36. Считывание данных с линейном клавиатуры: а) внешний вид; б) схема подключения; в) структура данных.
3.7. Подключение клавиатур Структура данных для решаемой задачи приведена на Рис. 3.36,в. В регистрах процессора можно разместить считываемый байт RD BYTE, код сканирования SCAN CODE, переменную NUMBR для подавления дребезга контактов и сче! чик цикла COUNTER. Код нажатой клавиши KEY можно разместить ио внутрен- ней памяти данных типа DATA, а для флага клавиатуры KEY_Flag можно зарезер- вировать место в памяти типа BIT Граф-схема алгоритма для заданной функции считывания данных с линейной клавиатуры GETKEY показана на Рис. 3.37. Эта функция предполагает совмеш ную работу с процедурой обслуживания прерывания таймера 3 TMR3 ISR, рабо- тающего в циклическом режиме с периодом 50 мс. Согласно Рис. 3.37 после вы- зова функции GET KEY она ожидает установку флага клавиатуры KEYFIag, после чего обнуляет его и завершает свою работу. При этом в ячейке памяти КГЛ находится код, считанный с клавиатуры. Основной процесс обработки данных реализуется в процедуре TMR3_1SR. После очистки флага прерывания таймера 3 (1) выполняется обнуление кода сканирования (2) и ввод байта состояния клавиатуры (3). Затем запускается цикл сканирования, включающий инициализацию счетчика цикла (4), сдвш вправо через перенос считанного с клавиатуры байта (5), проверку бита перспо са на равенство 0 (6), инкремент кода сканирования (9) и проверку конца цикла (10). Если перенос равен 0 (6), то это значит, что клавиша была нажата, следова тельно, надо инкрементировать переменную подавления дребезга контактов NUMBR (7) и сохранить код сканирования в ячейке KEY (8). Если же цикл ска пирования завершился без обнаружения 0 в считанном коде, то это означает, что клавиша или вовсе не была нажата либо она только что отпущена. Если пере- менная NUMBR = 0 (11), то это значит, что клавиша не была нажата. Если пере- менная NUMBR < 2 (12), то это значит, что длительность нажатия была менее 50 мс. Этот случай рассматривается как дребезг контактов, и нажатие надо проиг- норировать, а переменную NUMBR обнулить (14). Если же проверка NUMBR < 2 дает отрицательный результат, значит, длительность нажатия была более 50 мс, и тогда следует установить флаг клавиатуры (13) и обнулить NUMBR. Нетрудно убедиться в том, что приведенный алгоритм обеспечивает установку флага кла ииатуры только в момент отпускания клавиши (т. е. однократное нажатие нс мо жег зафиксироваться более одного раза), а также успешное подавление дребезга контактов как при нажатии клавиши, так и при отпускании. При установлен ном флаге клавиатуры в ячейке KEY сохраняется действительный код клавиши вплоть до следующего нажатия. Конфигурирование МК для данной задачи включает запрет сторожевого тай мера (см. описание к задаче 1) и конфигурирование таймеров. Для этого с ними шью мастера конфигурации (Configuration Wizard 2) можно открыть окно Timers и па вкладке Timer 3 нажать кнопку конфигурации прерываний (Configure Timer Interrupts), что вызывает открытие окна конфигурации прерываний Interrupts 1им надо установить флажок разрешения прерываний Enable Timer 3 Interrupt и нажать кнопку ОК, что возвращает процесс к продолжению конфигурации гай мера 3. Далее пади установить флажок разрешения таймера Enable Timer и ввсс- 1п начальное (Timer Initial Value) и перезагружаемое (Timer Reload Value) значе-
Глава 3. Проектирование аппаратных и программных средств Рис. 3.37. Считывание данных с линейной клавиатуры: граф-схема алгоритма. ния для данного таймера, рассчитанные с учетом тактовой частоты SYSCLK = 2 МГц, коэффициента предделения SYSCLK/12 и времени переполнения 50 мс: Timer Reload Value = 65536 — 50000-2/12 « 57203 = DF73H. Вид окна Timers после конфигурирования показан на Рис. 3.38. Нажатие кноп- ки ОК в этом окне завершает конфигурирование. После этого код конфигурации, сохраненный в файле LKeyboard conf, содержит три подпрограммы: конфигура- ции источников сброса, конфигурации таймеров и конфигурации прерываний.
3.7. Подключение клавиа1у(. Timers Timer 01 Timer 1 | Timer 2 Timer 3 | Timer 41 Prescaled Clock Inputs Г SYSCLK Timer Interrupt Timer 3 Interrupt is Enabled Configure Timer Interrupts I SYSCLK/12 Timer Control tv* Enable Timer Clock Source Prescaled Clock Input (Above) Timer Initial Value (Hex) TMR3H. TMR3L- pr DF C External Oscillator / 8 Timer Reload Value (Hex) TMR3RLH: TMR3RLL. DF 73 SMBus Timeout Timer 3 will NOT 1 overflow at 25 ms Set Overflow to 25ms] TMR3CN =0x04 TMR3RLL -0x73; TMR3RLH =0xDF- TMR3L = 0x73; TMR3H = OxDF Cancel | Reset Puc. 3.38. Считывание данных с линейной клавиатуры: конфигурация М К. Исходный код для считывания данных с линейной клавиатуры, сохраненный в файле LKeyboard, приведен ниже. ; Задача 22: Считывание данных с линейной клавиатуры ;LKeyboard.ASM ;--------------- Глобальные/локальные переменные ---- $INCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) — Константы - — RD_BYTE EQU A ; Читаемый байт SCAN_CODE EQU R3 ; Байт сканирования NUMBR EQU R4 ; Число для подавления дребезга COUNTER EQU R5 ; Счетчик цикла KEY_PORT EQU P3 ; Порт клавиатуры Tim J i f EQU 80H ; Маска флага прерывания I •-----------------------Сегменты my_stack segment idata
Глава 3. Проектирование аппаратных и программных средств rseg ds my_stack lOh d_seg SEGMENT DATA RSEG d_seg KEY: DS 1 Код клавиши b_seg SEGMENT BIT RSEG b_seg KEY_Flag DBIT 1 Флаг клавиатуры cseg at 0 ПГЛОТ'Л 'D — — _ _ _ _ _ — f •DcKiOpbl ПрсрЫЬаНИИ org OOh Вектор сброса LJMP Config org 0073h Вектор таймера 3 ljmp TMR3_ISR org 0B3h Конец области прерываний / Config: mov sp,#my_stack-l Инициализация стека Icall Init_Device Вызов подпрограммы конфигурации clr KEY_Flag Очистить KEY_Flag mov NUMBR,#0 Очистить число setb EA Разрешить прерывания 1 sjmp $ GET_KEY: jnb KEY_Flag,$ KEY_Flag =1? clr KEY_Flag Очистить KEY_Flag ret W TMR3_ISR: anl TMR3CN,#not(Tmr3if) 1.Очистить флаг прерывания mov SCAN_CODE,#0 2.SCAN_CODE = 0 mov RD_BYTE,KEY_PORT 3.Ввести RD—BYTE mov COUNTER,#8 4.COUNTER = 8 rotate: rrc RD_BYTE 5.Сдвинуть вправо RD_BYTE jc increm 6.CY = 0? inc NUMBR 7.Инкремент NUMBR mov KEY,SCAN_CODE 8.KEY = SCAN_CODE sjmp ext increm: inc SCAN—CODE 9.Инкремент SCAN_CODE djnz COUNTER,rotate 10.COUNTER =0? mov a,NUMBR 11.NUMBR = 0? jz ext cjne NUMBR,#2,nextl 12.NUMBR <2? nextl: jc clr_n setb KEY_Flag 13.Установить KEY_Flag clr_n: mov NUMBR,#0 14.NUMBR = 0 ext: reti END
3.7. Подключение клавиатур В разделе «Константы» присвоены символические имена соответствующих переменных регистрам R3, R4, R5 и порту РЗ МК, а также назначено значение для маски сброса флага прерывания таймера 3, поскольку регистр управления этого таймера не является бит-адресуемым. В разделе «Сегменты» в соответствии с Рис. 3.36,в определен переместимый сегмент DATA, в котором зарезервирован 1 байт для переменной KEY, а также переместимый сегмент BIT, в котором зарсзср вирован 1 бит для флага клавиатуры KEYFlag. В разделе «Векторы прерывании» в дополнение к традиционному вектору сброса определен вектор таймера 3 в со ответствии с Табл. 1.4. В разделе «Код инициализации» в дополнение к традици онным командам добавлены команды очистки флага клавиатуры, обнуления пе- ременной для подавления дребезга контактов и глобального разрешения преры- ваний. Раздел «Главная программа» содержит только «заглушку» — команду бесконечного цикла, так как все заданные функции реализуются в подпрограм- мах. Структура кода, приведенного в разделах «Подпрограммы» и «Подпрограм мы обработки прерываний», полностью соответствует граф-схеме алгоритма Рис. 3.37. Подробные комментарии позволяют легко понять, какие команды ис- пользуются для кодирования операторов алгоритма. Задача 23. Написать подпрограмму для считывания данных с линейной кла виатуры, показанной на Рис. 3.36,а, с расширением аппаратных ресурсов кла виатуры за счет распознавания трех способов нажатия на каждую клавишу: кратковременное нажатие (длительностью менее 0.5 с), длительное нажашс (менее 3 с, однако более 0.5 с) и продолжительное удержание (в течение креме ни более 3 с). Временные диаграммы, поясняющие метод решения данной задачи, поката ны на Рис. 3.39,а. Диаграммы для кратковременного нажатия Click, длительного нажатия Press и продолжительного удержания Hold имеют совершенно идентич ную форму: нажатие и отпускание на клавиши сопровождается импульсами дрс безга контактов, а между нажатием и отпусканием наблюдается период активно го состояния клавиши (на временных диаграммах условно показан высоким ло гическим уровнем, хотя реальный активный уровень, например, в схеме Рис. 3.36,а — низкий). На временных диаграммах вертикальными линиями пока заны интервалы базы времени отсчета таймера, которая в рассматриваемом при мере выбрана равной 50 мс. Такое время выбрано из расчета, что самый длитегп. ный импульс дребезга контактов не превышает этого значения, а самое краткое ременное нажатие, как минимум, в 2 раза более продолжительно. Из временных диаграмм следует, что для распознавания длительности нажатия можно неволь топать подсчет количества интервалов базы времени в период активного состоя ния клавиши. Структура данных для расширения аппаратных ресурсов клавиатуры требует применения трех флагов клавиатуры вместо одного, как это показано на Рис. 3.39,6. Дополнительные изменения, которые следует внести в процедуру обработки прерывания таймера 3 (см. Рис. 3.37), показаны на граф-схеме Рис. 3.39,в. Для оценки длительности нажатия на клавишу можно пспольювагь переменную
Глава 3. Проектирование аппаратных и программных средств Рис. 3.39. Расширение аппаратных ресурсов линейной клавиатуры: а) временные диаграммы; б) структура данных; в) граф-схема алгоритма. NUMBR, используемую для подавления дребезга контактов. Значение этой пере- менной в момент отпускания клавиши как раз равно количеству интервалов базы времени в период активного состояния клавиши. Следовательно, если NUMBR < 10 (12с), т. е. меньше 0.5 с, то надо установить флаг Click (13с). Если NUMBR < 60 (12р), т. е. меньше 3 с, то надо установить флаг Press (13р). В противном случае — установить флаг Hold (13h).
3.7. Подключение клавиатур Конфигурация МКдля данной задачи аналогична конфигурации в задаче 22 и сохранена в файле XKeyboard conf. Исходный код для считывания данных с линейной клавиатуры с расширени- ем аппаратных ресурсов, сохраненный в файле XKeyboard, приведен ниже. г ; Задача 23: Расширение аппаратных ресурсов линейной клавиатуры ;XKeyboard.ASM f Глобальные/локальные переменные SINCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) — Константы -- — RD_BYTE EQU A Читаемый байт SCAN_CODE EQU R3 Байт сканирования NUMBR EQU R4 Число для подавления дребезга COUNTER EQU R5 Счетчик цикла KEY_PORT EQU P3 Порт клавиатуры Tmr3if EQU 8 OH Маска флага прерывания ! — Сегменты -- — my_stack segment idata rseg my_stack ds lOh d_seg SEGMENT DATA RSEG d_seg KEY: DS 1 Код клавиши b_seg SEGMENT BIT RSEG b_seg Click: DBIT 1 Флаг Click Press: DBIT 1 Флаг Press Hold: DBIT 1 Флаг Hold cseg at 0 t org OOh Вектор сброса LJMP Config org 0073h Вектор таймера 3 Ijmp TMR3_ISR org 0B3h Конец области прерываний ! Config: mov sp,#my_stack-l ; Инициализация стека Icall Init_Device ; Вызов подпрограммы конфигурации clr Click Очистить флаги clr Press clr Click mov NUMBP,#0 Очистить число setb EA Разрешить прерывания 1 sjmp $ 1"
Глава 3. Проектирование аппаратных и программных средств GET_KEY: mov c,Click orl c,Press orl c,Hold jnc $ ret Click OR Press OR Hold = 1? TMR3_ISR: rotate: increm: nextl: next10: next60: set_p: set_c: clr_n: ext: anl TMR3CN,#not(Tmr3if) mov SCAN_CODE,#0 mov RD_BYTE,KEY_PORT mov COUNTER,#8 rrc RD—BYTE jc increm inc NUMBR mov KEY,SCAN_CODE sjmp ext inc SCAN_CODE djnz COUNTER,rotate mov a,NUMBR jz ext cjne NUMBR,#2,nextl jc clr_n cjne NUMBR,#10,nextlO jc set_c cjne NUMBR,#60,next60 jc set—p setb Hold sjmp clr_n setb Press sjmp clr_n setb Click mov NUMBR,#0 reti 1.Очистить флаг прерывания 2.SCAN_CODE = 0 3.Ввести RD—BYTE 4 .COUNTER = 8 5 .Сдвинуть вправо RD_BYTE 6 .CY = 0? 7 .Инкремент NUMBR 8 .KEY = SCAN_CODE 9 .Инкремент SCAN_CODE 10 .COUNTER =0? 11 .NUMBR = 0? 12 .NUMBR < 2? 12c.NUMBR < 10? 12p.NUMBR < 60? 13h.Установить Hold 13р.Установить Press 13c.Установить Click 14 . NUMBR = 0 END В подпрограмме GET K.EY в качестве признака ожидания используется логи- ческое ИЛИ состояний всех трех флагов клавиатуры. В подпрограмму обработки прерывания таймера 3 внесены изменения, полностью соответствующие граф- схеме Рис. 3.39,в. Таким образом, добавление нескольких строк программного кода позволяет расширить аппаратные ресурсы клавиатуры в 3 раза: линейная клавиатура, имею- щая 8 физических клавиш, становится эквивалентной клавиатуре, имеющей 24 клавиши. Такая возможность очень важна для построения миниатюрных копе грукций, где просто нет достаточно места для размещения большого количества клавиш. Кроме того, такая возможность просто упрощает конструкцию и уде- шевляет устройство.
3.7. Подключение клавиатур Задача 24. Написать подпрограмму для считывания данных с матричной кла виатуры 4x4, показанной на Рис. 3.40,а. Таблица 3.3. Коды ASCII для матричной клавиатуры Код сканирования Символ Код ASCII 0 * 2 Ah 1 0 30h 2 # 23h 3 D 44h 4 7 37h 5 8 38h б 9 39h 7 С 43h 8 4 34h 9 5 35h 10 б 36h 11 В 42h 12 1 31h 13 2 32h 14 3 33h 15 А 41h Использование матричной схемы включения контактов клавиатуры пот воляет уменьшить количество требуе- мых выводов портов МК для ее под ключения. Матричная клавиатура, со держащая 16 клавиш, имеет всего 4 вывода строк (Yl, Y2, Y3, Y4) и 4 выво- да колонок (XI, Х2, ХЗ, Х4), всего 8 вы водов, и может быть непосредственно подключена к одному из портов МК, как это показано на Рис. 3.40,6. Следу- ет отметить, что внутренние резисторы имеют сопротивление порядка 100 кОм, поэтому для повышения быстро действия необходимо подключить бо лее низкоомные внешние резисторы Функция считывания данных с клавиа туры (Рис. 3.40,а) предполагает вычис ление кода ASCII символа клавиши. который напечатан или выгравирован на поверхности кнопки. Это можно сделать путем сканирования состояний кон- тактов клавиш и вычисления кода сканирования SC (см. значения кода па Рис. 3.40,6) с последующим табличным преобразованием его в код ASCII в сот - ветствии с Табл. 3.3. Сканирование клавиатуры можно вести построчно. Для это- го надо активизировать строку путем записи активного логического 0 в одной и т строк, азатем произвести считывание данных. Положение активного логическо- го 0 в считанной строке указывает на номер колонки, соответствующей нажатой клавише. Принцип сканирования матричной клавиатуры поясняется стрелками на Рис. 3.40,а. Структура данных для решаемой задачи приведена на Рис. 3.40,в. Эта структу- ра идентична структуре данных для задачи 22. Единственным отличием является дополнительный записываемый байт WRBYTE, назначением которого является выбор текущей строки для сканирования. Соответствие битов записываемой» байта WR BYTE и считываемого байта RD BYTE строкам и колонкам коптам пой матрицы показано на рисунке. Граф-схема алгоритма для заданной функции считывания данных с матрич пой клавиатуры GET K.EY показана на Рис. 3.41. Эта функция предполагает совместную работу с процедурой обслуживания прерывания таймера 3 TMR3_ISR, работающего в циклическом режиме с периодом 50 мс. Согласно Рис. 3.41 после вызова функции GETKEY она ожидает установку флага клавиа гуры KEY_Flag, после чего обнуляет сто и выполняет преобразование кода ска пирования в код ASCII
Глава 3. Проектирование аппаратных и программных средств в) Рис. 3.40. Считывание данных с матричной клавиатуры: а) внешний вид; б) схема полключсння, в) структура данных.
3.7. Подключение клавиатур С GET KEY KEY Flag = 1? Очистить KEYJlag Сканирование строк COUNTER =4 г8—-------- Сдвинуть вправо RDBYTE через перенос Нет г-12 Инкремент SCANCODE 9 CY=0? Нет COUNTER-O? Нет. 4 SCAN CODE = 16? Преобразовать в код ASCII Клавиша нажата Да] I Сканирование колонок Да___ Нет [—10-------- . Инкремент NUMBR г11-------- , KEY = SCAN CODE 16 Нет г.1,7' 15 Да! Да Да Подавление дребезга контактов Установить KEY_Flag NUMBR<2 Клавиша не нажата или отпущена Г18—---- | NUMBR=О Puc. 3.41. Считывание данных с матричном клавиатуры: граф-схема алгоритма. Основной процесс обработки данных реализуется в процедуре TMR3_ISR I 1осле очистки флага прерывания таймера 3(1) выполняется инициализация про цссса сканирования (2). При этом обнуляется байт сканирования SCAN CODE и устанавливается начальное значение для записываемого байта WRBYTE. Для вы бора в качестве первой строки Y4, подключенной к 7-му старшему биту порта 3 (см. Рис. 3.40,6), с учетом циклического сдвига вправо в начале цикла сканирова пня строк (3), в качестве п шального значения следует выбрать 11111110В = 01EII Цикл сканирования матричной клавиатуры включает цикл сканирования строк п вложенный в него никл сканирования колонок (см. Рис. 3.41). Сканирование
Глава 3. Проектирование аппаратных и программных средств строк включает оператор выбора очередной строки путем сдвига вправо записы- ваемого байта WRBYTE (3), активизации строки путем вывода этого байта в порт (4), короткой задержки для ожидания затухания переходных процессов (5) и ввода считываемого байта RD BYTE (6). Цикл сканирования колонок совершенно ана- логичен циклу сканирования линейной клавиатуры (операторы 7, 8, 9, 12, 13), с тем лишь отличием, что счетчик цикла на фазе инициализации (7) устанавливает- ся на значение 4 в соответствии с количеством сканируемых колонок. Выход из цикла сканирования в случае, когда клавиша не нажата или отпущена, произво- дится по значению кода сканирования SCAN CODE = 16 (14). Остальные опера- торы алгоритма (10, 11, 15, 16, 17, 18) полностью аналогичны операторам (7, 8, 11, 12, 13, 14) алгоритма задачи 22 (см. Рис. 3.37). Конфигурация МК для данной задачи совершенно аналогична конфигурации р задаче 22 и сохранена в файле М Keyboard conf. Исходный код для считывания данных с матричной клавиатуры, сохранен- ный в файле М Keyboard, приведен ниже. Этот код аналогичен исходному коду для задачи 22 с учетом отличий алгоритма Рис. 3.41. ; Задача 24: Считывание данных с матричной клавиатуры ! ;MKeyboard.ASM $INCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) ; Константы RD_BYTE EQU A ; Читаемый байт WR_BYTE EQU R2 ; Записываемый байт SCAN_CODE EQU R3 ; Байт сканирования NUMBR EQU R4 ; Число для подавления дребезга COUNTER EQU R5 ; Счетчик цикла KEY_PORT EQU РЗ ; Порт клавиатуры Tmr3if EQU 80Н ; Маска флага прерывания / my_stack d_seg KEY: b_seg KEY_Flag: segment idata rseg my_stack ds lOh SEGMENT DATA RSEG d_seg DS 1 ; Код клавиши SEGMENT BIT RSEG b_seg DBIT 1 ; Флаг клавиатуры cseg at 0 i org LJMP org ljmp 00h ; Вектор сброса Config 0073h ; Вектор таймера 3 TMR3_ISR
3.7. Подключение клавиатур org 0B3h Конец области прерываний 1 Config: mov Icall clr mov setb sp,#my_stack-l ; Инициализация стека Init_Device ; Вызов подпрограммы конфигурации KEY_Flag ; Очистить KEY_Flag NUMBR, # 0 ; Очистить число ЕА ; Разрешить прерывания / sjmp $ GET_KEY: jnb KEY_Flag,$ ; clr KEY_Flag ; mov dptr,#ASCII_Tabl ; mov a,KEY move a,@a+dptr ret Подпрограммы обработки anl TMR3CN,#not(Tmr3if) ; push acc mov SCAN_CODE,#0 mov WR_BYTE,#OFEh mov a,WR_BYTE ; rr a mov WR_BYTE,a mov KEY_PORT,WR_BYTE nop ; mov RD_BYTE,KEY_PORT mov COUNTER,#4 rrc RD_BYTE ; j c increm ; inc NUMBR ; mov KEY,SCAN_CODE sjmp ext inc SCAN_CODE djnz COUNTER,rotate cjne SCAN_CODE,#16,next_r ; mov a,NUMBR ; j z ext cjne NUMBR,#2,next1 ; jc clr_n setb KEY_Flag ; mov NUMBR,#0 pop acc reti KEY_Flag =1? Очистить KEY_Flag Преобразовать в код ASCII TMR3_ISR: next_r: rotate: increm: Il«Ctl: Clr_n: Xt: 1.Очистить флаг прерывания 2.SCAN_CODE = 0 WR_BYTE = FEH 3.Сдвинуть вправо WR_BYTE 4.Вывести WR_BYTE 5.Задержка 6.Ввести RD_BYTE 7 .COUNTER = 4 8 .Сдвинуть вправо RD_BYTE 9 .CY = 0? 10 .Инкремент NUMBR 11 .KEY = SCAN_CODE 12 .Инкремент SCAN_CODE 13 .COUNTER =0? 14 .SCAN_CODE = 16? 15 .NUMBR =0? . 16 .NUMBR < 2? 17 .Установить KEY_Flag 18 .NUMBR = 0 1 ЛГСП.ТаЫ: L db 2Ah,30h,23h,44h,37h,38h,39h,43h db 34h,35h,3611,42h,31h,32h,33h,41h
Глава 3. Проектирование аппаратных и программных средств В разделе «Константы» добавлено присвоение символического имени WR_BYTE регистру R2. В разделе «Подпрограммы» в подпрограмме GET KEY добавлены команды для преобразования кода сканирования в код ASCII. В под- программу обработки прерывания таймера 3 внесены изменения, полностью со- ответствующие граф-схеме Рис. 3.41. В конце исходного кода добавлен раздел «Таблицы», в котором определена таблица кодов ASCH с учетом конструкции клавиатуры (см. Рис. 3.40,а) и выбранного порядка сканирования. Задача 25. Разработать электрическую схему и написать подпрограмму для считывания данных с матричной клавиатуры 4x4, подключаемой к МК по трех- проводному интерфейсу. Подключение клавиатуры 4 х 4 к МК с помощью нескольких проводов мо- жет быть весьма полезным, если расстояние между МК и клавиатурой состав- ляет несколько метров. В технической литературе опубликованы методы реа- лизации этой идеи. Например, в [10] описан метод использования встроенно- го АЦП для построения двухпроводного интерфейса. Метод использует преобразование номера клавиши в сопротивление, а затем — измерение вы- ходного напряжения резистивного делителя напряжения. Однако использова- ние такого прецизионного ресурса МК, как АЦП, для обслуживания клавиату- ры не всегда является оправданным. Более экономичным решением является использование для обслуживания клавиатуры одного из встроенных таймеров. Для этой цели следует использовать схему преобразования «номер клавиши -> сопротивление-» время». Электрическая схема для такого решения приведена на Рис. 3.42,а. В схеме используется измерение интервала, пропорционального постоянной времени RC-цепи, образованной конденсатором С1 емкостью 33 нФ и резистором, обра- зованным последовательным соединением резистора R1 сопротивлением 5 кОм и коммутируемым сопротивлением клавиатуры. Из схемы Рис. 3.42,а следует, что последнее сопротивление пропорционально коду сканирования: IOkOmxSC. Временные диаграммы изменения напряжения на конденсаторе CI, поступающего на неинвертируюший вход встроенного компаратора CP0+, показаны на Рис. 3.42,6. Зависимость этого напряжения от времени t, описыва- ется выражением CP0+ = Vcc (1 - е ~‘/RC). (3.6) Опорное напряжение, подаваемое на инвертирующий вход компаратора СРО с помощью делителя напряжения (R6, R8, R11), необходимо рассчитать. Пусть каждому значению кода сканирования отведен интервал в 128 мкс, как показано па Рис. 3.42,6. Если 16-битный таймер М К будет работать на частоте 2 МГц, то пе- реход из одного 128-мкс интервала в другой будет соответствовать инкрементиро вапию старшего байта таймера, т. е. старший байт таймера будет содержать 6ain сканирования. Точки возможного срабатывания компаратора необходимо распо дожить ровно па середине выбранных отрезков, чтобы сделать преобразователь нечувствительным к разбросу номиналов пассивных компонентов и колебанию частоты задающего генератора М k. 111 временных диаграмм видно, что, с учетом
3.7. Подключение клавиатур б) СРО+ В) Рис. 3.42. Клавиатура с грехпроводным интерфейсом: а) схема подключения; (>) временные диаграммы иреоорлювапня «сопротивление — время»; в) временная диаграмма процесса 1аряда разряда.
Глава 3. Проектирование аппаратных и программных средств линейности начального участка экспоненты, интервалу в 128 мкс будет соответс- твовать сопротивление 10 кОм. На основе этих значений по формуле (3.6) можно рассчитать величину требуемого опорного напряжения на инвертирующем входе компаратора: СРО- = CP0+ = Vcc (1- е,/RC) = Vcc (1 - e~I28/<10 33») * 0.32 Vcc. Точная калибровка схемы может быть выполнена с помощью подстроечного потенциометра R8. Полный цикл работы схемы Рис. 3.42,а включает фазу заряда длительностью 2048 мкс (см. Рис. 3.42,6) и фазу разряда, для которой нужно выбрать интервал времени, значительно превышающий значение постоянной времени разряда, как показано на Рис. 3.42,в. Момент начала разряда инициируется подачей логичес- кого 0 на вывод порта Р1.0 (см. Рис. 3.42,а). Поэтому номинал разрядного резис- тора R2 следует выбрать из соображений максимально допустимого тока для вы- вода порта МК (100 мА). Приемлемой величиной сопротивления R2 будет 100 Ом. Для рассматриваемого случая можно выбрать длительность разряда, соот- ветствующую полной емкости 16-битного таймера, работающего на частоте 2 МГц, т. е. 32768 мкс. Нетрудно подсчитать, что частота опроса клавиатуры соста- вит при этом 28.7 Гц, что вполне приемлемо из соображений подавления эффекта дребезга контактов. Оба интервала времени — заряда и разряда — могут быть от- считаны с помощью одного таймера, например таймера 3. Следовательно, в кон- це каждого из интервалов будут следовать прерывания от таймера (см. Рис. 3.42,в), а если клавиша нажата, то в период заряда конденсатора будут следо- вать прерывания от компаратора (см. Рис. 3.42,6). Таким образом, обслуживание клавиатуры можно выполнить с помощью двух подпрограмм обработки прерыва- ний: компаратора 0 и таймера 3. Структура данных для решаемой задачи приведена на Рис. 3.43,а. Для обслу- живания клавиатуры потребуется переменная для подавления дребезга контактов NMBR, а также байт для сохранения предшествующего значения кода сканиро- вания клавиатуры OLD, которые можно разместить в регистрах R6 и R7 активно- го банка регистров. В регистре старшего байта таймера 3 — TMR3H — будет нахо- диться код сканирования SC. Во внутренней памяти данных, в дополнение к ячейке кода клавиши KEY и флагу клавиатуры KEYFlag, необходимо зарезерви- ровать дополнительный флаг фазы Charge (1 — заряд, 0 — разряд). Граф-схемы алгоритмов для процедур обработки прерываний от нарастающе- го фронта выходного сигнала компаратора 0 CPT0R_ISR и таймера 3 TMR3 ISR показаны на Рис. 3.43,6. Срабатывание компаратора во время заряда измерительного конденсатора фиксирует факт нажатия клавиши. Поэтому процедура обработки прерывания CPT0RISR, кроме операторов по сохранению и восстановлению регистров (С1 и С6), содержит операторы проверки старого и нового кода сканирования (С2) и инкремента переменной гашения дребезга контактов в случае их соипа дения (СЗ). Несовпадение этих данных говорит о том, что состояние клавиш изменилось. Если при этом NMBR «2 (С4), то произошел дребезг контактов и, следовательно, надо обнулить NMBR н присвоить новое значение перемен
3.7. Подключение клавиатур BANKO R6 NMBR R7 OLD Процессор ; Внутренняя память данных SFRs 1 DATA BIT TMR3L TMR3H I KEY 1 1 KEY Flag | I SC | Charge ~| а) б) /’«г. .1.4.1. Клавиатура с трсхпроподным интерфейсом: а) структура данных; б) граф-схсмы алгоритмов.
Глава 3. Проектирование аппаратных и программных средств ной OLD (С5). Иначе значение переменной NMBR сохраняется для оценки в процедуре обработки прерывания таймера 3. Перед завершением процедуры CPT0R_ISR необходимо запретить прерывания компаратора (С7) до следую- щей фазы заряда. Сразу после входа в процедуру обработки прерывания от таймера 3 TMR3ISR можно очистить флаг прерывания (Т1) и сохранить содержимое ре- гистров (Т2). После этого необходимо выполнить ветвление по состоянию фла- га фазы (ТЗ). Если Charge 1, т. е. закончилась фаза разряда, то нужно инициа- лизировать фазу заряда: установить флаг Charge = 1, подготовить значение пе- резагрузки таймера для следующей фазы разряда (значение для фазы заряда уже автоматически перезагрузилось в таймер в момент прерывания) (Т4), очистить флаг прерывания (Т5) и разрешить прерывания компаратора О (Тб). Если же Charge = 1, т. е. закончилась фаза заряда, то нужно инициализировать фазу раз- ряда: установить флаг Charge = 0 и подготовить значение перезагрузки таймера для следующей фазы заряда (Т7). После этого можно проверить, срабатывал ли компаратор во время заряда (Т8). Если не срабатывал, то это означает, что кла- виша или не была нажата вовсе, или была отпущена, поэтому следует прове- рить значение переменной NMBR (T9). Если NMBR > 2, то ясно, что клавиша была отпущена и надо переслать значение кода в ячейку KEY и установить флаг клавиатуры KEY_Flag (Т10). В любом случае если компаратор не сработал, то нужно обнулить NMBR (Т11). Общая заключительная ветвь описываемой про- цедуры содержит оператор вывода состояния флага Charge в бит порта Р1.0 (Т12) для управления ключом разряда и оператор восстановления содержимого регистров (Т13). Конфигурирование МКдля данной задачи включает запрет сторожевого тай- мера (см. описание к задаче 1), а также конфигурирование таймера 3, портов вво- да/вывода и компаратора 0 Для этого с помощью мастера конфигурации (Configuration Wizard 2) можно открыть окно конфигурации таймеров Timers. На вкладке таймера 3 необходимо выбрать опцию синхронизации SYSCLK, затем нажать кнопку конфигурации прерываний (Configure Timer Interrupts), что вызы- вает открытие окна конфигурации прерываний Interrupts. Там надо установить флажок разрешения прерываний Enable Timer 3 Interrupt и нажать кнопку ОК, что возвращает процесс к продолжению конфигурирования таймера 3. Далее на- до установить флажок разрешения таймера Enable Timer и ввести начальное (Timer Initial Value) и перезагружаемое (Timer Reload Value) значения для данного таймера, рассчитанные с учетом частоты SYSCLK = 2 МГц, как это показано на Рис. 3.44. Затем в окне конфигурации портов Port I/O установить флажок Enable Crossbar, после чего нажать кнопку ОК. Далее нужно открыть окно конфигурации компараторов Comparator и на вкладке компаратора 0 установить флажок разре- шения Enable Comparator 0 (см. Рис. 3.44). Нажатие кнопки ОК в окне Comparator завершает конфигурирование МК. После этого код конфигурации, сохраненный в файле TKeyboard _conf, содержит пять подпрограмм: конфигура цпи источников сброса, конфигурации таймеров, конфигурации компараторов, конфигурации ввода/вывода и конфигурации прерываний.
3.7. Подключение клавиатур Гис. 3.44. К i.iiiiiaivpn с ipixiipoiio/uibiM интерфейсом: конфигурация МК.
Глава 3. Проектирование аппаратных и программных средств Исходный код для задачи построения клавиатуры с трехпроводным интер- фейсом, сохраненный под именем TKeyboard, приведен ниже. ; Задача 25: Клавиатура с трехпроводным интерфейсом f '• ;TKeyboard.ASM .---------------Глобальные/локальные переменные------- $INCLUDE(C8051F020.INC); Файл с определениями для МК extrn TMR3_IF code (Init_Device) equ Константы 10000000b ; Маска флага прерывания TF3 таймера 3 CPORIF equ 00100000b ; Маска флага прерывания CPORIF компар. 0 ECPOR equ 00100000b ; Маска разрешения прерывания компар. 0 NMBR equ R6 Число для подавления дребезга OLD equ R7 ; Старое значение кода сканирования SC equ TMR3H ; Код сканирования f — Сегменты - — my_stack segment rseg ds idata my_stack lOh d_seg SEGMENT RSEG DATA d_seg KEY: DS 1 ; Код клавиши b_seg SEGMENT BIT RSEG b_seg KEY_Flag: : DBIT 1 ; Флаг клавиатуры Charge: DBIT 1 ; Флаг Заряд/Разряд cseg at О Векторы прерываний org 00h Вектор сброса LJMP Config org 005Bh Вектор прерывания компаратора 0 Ijmp CPT0R_ISR org 0073h Вектор таймера 3 Ijmp TMR3_ISR org 0B3h Конец области прерываний * Config: mov sp,#my_stack-l ; Инициализация стека Icall Init_Device ; Вызов подпрограммы конфигурации clr Charge ; Разряд clr P1.0 mov NMBR,#0 Очистить NMBR mov OLD,#0 Очистить OLD clr KEY_Flag Очистить флаг клавиатуры anl TMR3CN,#not TMR3_IF ; Очистить флаг TF3 setb EA Разрешить прерывания f sjmp $ Подпрограммы
3.7. Подключение клавиату GET_KEY: jnb KEY_Flag,$ KEY_Flag =1? clr KEY_Flag ; Очистить KEY_Flag mov dptr,#ASCII_Tabl ; Преобразовать в код ASCII mov a,KEY move a,@a+dptr ret CPTOR_ISR: С4: nextl: С6: TMR3_ISR: Т7: next2: Til: T12: push acc ; Cl.Сохранить ACC, PSW push psw mov a,OLD ; C2.OLD = SC? cjne a,SC,C4 inc NMBR ; СЗ.Инкремент NMBR sjmp C6 cjne NMBR,#2,nextl ; C4.NMBR<= 2? jnc C6 mov NMBR,#0 ; C5.NMBR = 0, OLD = SC mov OLD.SC pop psw ; C6.Восстановить PSW, ACC pop acc anl EIEl,#not ECPOR ; C7.Запретить прерывание CPOR reti anl TMR3CN,#not TMR3_IF; Tl.Очистить флаг TF3 push acc ; T2.Сохранить ACC, PSW push psw jb Charge,T7 ; T3.Charge =1? setb Charge ; T4.Charge = 1, TMR3RL = 0000H mov TMR3RLH,#0 anl CPTOCN,#not CPORIF ; T5.Очистить флаг CPORIF orl EIE1,#ECPOR ; Тб.Разрешить прерывания CPOR sjmp T12 clr Charge ; T7.Charge = 0, TMR3RL = F000H mov TMR3RLH,#OFOH mov a,#CPORIF ; T8.CPORIF =1? anl a.CPTOCN jnz T12 cjne NMBR,#2,next2 ; T9.NMBR<= 2 jc Til mov KEY,OLD ; T10.KEY = OLD&OFH, KEY_Flag = 1 anl KEY,#OFH setb KEY_Flag mov NMBR,#0 ; Til.NMBR = 0 mov C,Charge ; T12.P1.1 = Charge mov Pl.0,C pop psw ; T13.Восстановить PSW, ACC pop acc reti JUSCIIJTabl:
Глава 3. Проектирование аппаратных и программных средств db 2Ah,30h,23h,44h,37h,38h,39h,43h db 34h,35h,36h,42h,31h,32h,33h,41h END В разделе «Константы» присвоены символические имена маскам флагов и со- ответствующим регистрам МК. В разделе «Сегменты» в соответствии с Рис. 3.36,в определен переместимый сегмент DATA, в котором зарезервирован 1 байт для пе- ременной KEY. а также переместимый сегмент BIT, в котором зарезервированы 2 бита для флага клавиатуры KEYFlag и флага фазы Charge. В разделе «Векторы прерываний» в дополнение к традиционному вектору сброса определен вектор прерывания от нарастающего фронта компаратора 0 и вектор таймера 3 в соот- ветствии с Табл. 1.4. В разделе «Код инициализации» добавлены команды обнуле- ния флага Charge, установки низкого исходного уровня сигнала на выходе Р1.0, очистки переменных и флагов, а также глобального разрешения прерывания. Раз- дел «Главная программа» содержит только «заглушку» — команду бесконечного цикла, так как все заданные функции реализуются в подпрограммах. Структура кода функции GET KEY, приведенного в разделе «Подпрограммы», полностью соответствует одноименной функции из задачи 24. Код, приведенный в разделе «Подпрограммы обработки прерываний» для подпрограмм обработки прерыва- ний от компаратора 0 и таймера 3, построен согласно граф-схеме Рис. 3.43,6. Под- робные комментарии позволяют легко понять, какие команды используются для кодирования операторов алгоритма. В разделе «Таблицы» в конце исходного кода определена таблица кодов ASCII, аналогичная таблице из задачи 24. Следующие две задачи демонстрируют возможности обработки аналоговых сигналов. 3.8. Использование аналоговых периферийных устройств Задача 26. Разработать цифровой термометр, позволяющий измерять температу- ру среды в диапазоне О...99°С с точностью ± ГС с периодом 1 секунда и отображать значение температуры на двухразрядном 7-сегментном светодиодном индикаторе. В качестве температурного датчика можно использовать микросхему LM35 фирмы National Semiconductor [11], обладающую высокой линейностью и чув- ствительностью 10 мВ/градус. Выходное напряжение такого датчика, прямо про- порциональное температуре, можно преобразовать в код с помощью встроенного в МК АЦП и отобразить на светодиодном дисплее, аналогичном использованно- му в задаче 20. Структурная схема такого цифрового термометра приведена на Рис. 3.45,а. Для работы схемы с использованием внутреннего генератора опорно- го напряжения необходимо замкнуть выводы VREF и VREF0 (см. Рис. 1.64). Следует отметить, что для заданной точности измерений достаточно использовать 8-бш пый двоичный код, т. е. 1 байт. С этой целью при применении преобразователя ADC0 нужно использовать только таршпй байт (см. п. 1.10.1 па стр. 97).
3.8. Использование аналоговых периферийных устройств 00... 99 "С а) Двухразрядный светодиодный дисплей Q BINBCD Рис. 3.45. Цифровой термометр: а) структурная схема; б) граф-схема алгоритма В=10 Разделить А/В Свопинг частного (А) Упаковка двух цифр в один байт т Граф-схема алгоритма для решения задачи представлена на Рис. 3.45,6. Вычис- ли тельный процесс может быть разбит на ряд процедур. Первая процедура собс- твенно аналого-цифрового преобразования ADC работает совместно с процеду- рой обработки прерывания от преобразователя ADC0_ISR. Процедура ADC со- держит цепочку операторов: разрешения преобразоваге.'ш (I) запуска процесса
Глава 3. Проектирование аппаратных и программных средств преобразования (2), ожидания прерывания от преобразователя (3, 4) по оконча- нии процесса преобразования и сохранения в качестве результата старшего байта (5). Процедура обработки прерывания ADC0ISR в этом случае сводится к трем операциям: очистке флага прерывания (А1), запрещению преобразователя (А2) и установке флага переноса (АЗ), которого ожидает процедура ADC. Полученный двоичный код N связан с измеренным напряжением U следующим уравнением: U = VREF-N/256, (3.7) где VREF — опорное напряжение. С другой стороны, выходное напряжение датчика пропорционально темпера- туре (см. Рис. 3.45,а): U = Т-0.01, (3.8) где Т — температура в градусах Цельсия. Решая совместно уравнения (3.7) и (3.8) и используя VREF = 2.4 В (опорное на- пряжение внутреннего генератора,) можно получить T = N-240/256. (3.9) Уравнение (3.9) используется в процедуре масштабирования SCALE (см. Рис. 3.45,6). Двоичный код N передается процедуре через аккумулятор А. Поэто- му масштабирование выполняется путем умножения байта кода на байт констан- ты 240 (SI, S2), а из двухбайтного результата сохраняется лишь старший байт (S3), что эквивалентно делению на 256. Для отображения двух десятичных цифр на светодиодном дисплее необходи- мо полученный двоичный результат преобразовать в десятичный. Если исполь- зовать для отображения ранее разработанную процедуру LEDDISPLAY (см. за- дачу 20), то требуемый формат десятичного результата — Packed BCD. Необхо- димое преобразование выполняется с помощью процедуры BIN_BCD (см. Рис. 3.45,6), при этом входной параметр передается также через аккумулятор МК. Преобразование выполняется путем целочисленного деления двоичного кода на 10 (операторы В1 и В2). Поскольку значение этого кода не превышает 99 по условию задачи, частное от деления представляет собой код десятков, а оста- ток — код единиц. С помощью свопинга частного (ВЗ) четырехбитный код де- сятков пересылается в старшие биты байта, после чего с помощью операции ло- гического ИЛИ можно упаковать обе цифры в один байт (В4) для получения формата Packed BCD. Конфигурирование МК выполняется аналогично задаче 20. В дополнение к этому следует сконфигурировать аналого-цифровой преобразователь. Это можно выполнить следующим образом. Нужно открыть окно ADCs (Рис. 3.46) и на вкладке ADC0 нажать кнопку конфигурации прерываний (Configure ADC Interrupts), что вызывает открытие окна конфигурации прерываний Interrupts. Там надо установить флажок разрешения прерываний Enable ADCOINT Interrupt и нажать кнопку ОК, что возвращает процесс к продолжению конфигурирования ADC0. Затем надо нажать кнопку конфигурации источника опорного напряже ния (Configure Reference Control), что вы ii.maer открытие окна конфигурации ие-
3.8. Использование аналоговых периферийных устройств точника опорного напряжения Voltage Reference (см. Рис. 3.46). В этом окне надо установить два флажка: разрешения внутреннего генератора смешения Enable Internal Bias Generator и разрешения буферного усилителя опорного генератора Enable Internal Reference Buffer (см. п. 1.10.3 на стр. 106), после чего нажать кпои ку ОК, что возвращает процесс к конфигурации ADC0. Далее нужно нажать кнопку изменения тактовой частоты преобразователя Change SAR и выбрать не обходимую частоту, например 1000000 Гц. Встроенный калькулятор немедленно вычислит необходимое значение управляющего кода AD0SC для загрузки в ре гистр управления преобразователя (см. Рис. 3.46). И наконец, необходимо ус га новить флажок левого выравнивания результата Left justify ADC0H:ADC()I registers. Нажатие кнопки ОК завершает конфигурирование МК. После этого код конфигурации, сохраненный в файле TMeter conf, содержит шесть подпро- грамм: конфигурации источников сброса, конфигурации таймеров, конфигура ции аналого-цифровых преобразователей, конфигурации опорного напряжения, конфигурации ввода/вывода и конфигурации прерываний. Исходный код для цифрового термометра, сохраненный под именем TMelcr, приведен ниже. Задача 26: Цифровой термометр ;TMeter.ASM ;--------------- Глобальные/локальные переменные --- SINCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) Сегменты my_stack segment idata rseg iy_stack ds lOh d_seg SEGMENT DATA RSEG d_seg PACK_BCD: ds 1 ; Упакованный двоичыо-десятичный код TIME: ds 1 ; Переменная отсчета времени cseg at 0 — Векторы прерызании org OOh ; Вектор сброса LJMP Config org 007Bh ; Вектор преобразователя ADC0 Ijmp ADC0_ISR org 0B3h КОД ИН1 ; Конец области прерываний щиализации Config: mov sp,#my_stack-l ; Инициализация стека Icall Init_Device ; Вызов подпрограммы конфигурации setb ЕА ; Разрешить прерывания ;--------------------- Главная программа-------------------------- Main: call ADC ; Аналого-цифровое преобразование call SCALE ; Масштабирование call BIN_BCD ; Преобразование в двоично-десятичный код
Глава 3. Проектирование аппаратных и программных средств ADCs X ADCO | ADC1 | ADC Enable Г Enable ADCO Track Mode -• Continuous Tracking C Tracking defined by ADOCM Start ol Conversion Mode (ADOCM) ADC conversion initiated & every write of'1'to ADOBUSY on overflow of Timer 2 on overflow of Timer 3 C* on rising edge ol CNVSTR ADC Interrupt ADCO Interrupt is Enabled ADCO Windov^ Interrupt is Disabled | Configure ADC Interrupts | Reference Control Internal Bias Generator is On, Configured Properly Internal Reference Buffer is On Configure Reference Control I ADC MUX Selection Internal Amplifier Gain C" Gain = 0.5 Gain = 4 Gain = 1 Gain = 8 C Gam = 2 C Gain = 18 Programmable Window Detector High : Low Grearer Than: [ FF [ FF Less Than: DO p 00 Pairs in Al NO p- । Input Channel: JaINO O Configure Port I/O SAR Conversion Clock Hz Change SAR | ADOSC Value (Hex) | 01 P Left justify ADCOH ADCOL registers ADCOCF = 0x08; ADCOCN =0x01 OK Cancel I Reset Voltage* Reference Reference Control 0 j ADCO Voltage Reference ♦ VRE FOPin C DACO Output ADC1 Voltage Reference VREF1 Pin Г AV+ REFOCN = 0x03; Internal Analog Bias Generator Enable Internal Bias Generator Internal Reference Buffer r- Enable Internal Reference Buffer Temperature Sensoi [— Enable T emperature Sensor OK | Cancel I Reset Puc.3.46. Цифровой термоме тр: конфигурация MK.
3.8. Использование аналоговых периферийных устройств call call jmp LED_DISPLAY DELAY Main Индикация на светодиодном дисплее Задержка 1 секунда ADC: SCALE: BIN_BCD: LED_DISPLAY CONV_7SEG: DELAY: DI QMS: setb setb clr jnc mov ret mov mul xch ret mov div swap mov orl ret mov swap anl call mov mov anl call mov ret mov move ret mov mov mov setb jnb clr clr djnz ret ADOEN ADOBUSY c ; $ a,ADCOH b,#240 ab ; a,b ; b,#10 ab a ; b,PACK_BCD PACK_BCD,a a,PACK_BCD a a,#0Fh CONV_7SEG Pl, a a,PACK_BCD a,#0Fh CONV_7SEG P2, a dptr,#SEG_Tabl ; a,@a+dptr ; TIME,#100 thO,# high (-10000/6) t!0,# low (-10000/6) trO tf0,$ ; trO tfO TIME,D1OMS 1.Разрешить ADC0 2.Запустить ADC0 3.Очистить флаг переноса 4.CY = 1? 5.Сохранить старший байт Масштабирование: Т = N*240/256 S1.B = 240 S2 .Умножить А*В S3 .Сохранить старший байт В1 .В = 10 В2 .Разделить А/В ВЗ .Свопинг частного В4 .Упаковка двух цифр в один байт 1 .Преобразовать ст. цифру в Unpacked BCD 2 .Преобразовать в 7-сегментный код 3 .Вывести в порт 1 4 .Преобразовать мл. цифру в Unpacked BCD 5 .Преобразовать в 7-сегментный код 6 .Вывести в порт 2 С1.Переслать адрес таблицы в DPTR С2.Читать код из таблицы 100*10000 мкс = 1 секунда ; Инициализация таймера 0 ; на 10000 мкс Пуск таймера 0 Ожидание переполнения таймера 0 Стоп таймера 0 Очистить флаг переполнения таймера 0 /•----------- Подпрограммы обработки прерываний bCO.ISR:
Глава 3. Проектирование аппаратнь!х и программных средств clr ADOINT ; Al.Очистить флаг прерывания ADOINT clr AD0EN ; A2.Запретить ADCO setb c ; АЗ.Установить флаг переноса reti Таблицы SEG_Tabl: db 7Eh,30h,6Dh,79h,33h,5Bh,5Fh,70h,7Fh,7Bh ; Таблица 7-сет.кодов END В разделе «Сегменты» определен переместимый сегмент DATA, в котором за- резервирован 1 байт для упакованного двоично-десятичного кода PACK_BCD и 1 байт для переменной отсчета времени задержки TIME. В разделе «Векторы пре- рываний» в дополнение к традиционному вектору сброса определен вектор пре- рывания по концу преобразования ADCO в соответствии с Табл. 1.4. В разделе «Код инициализации» добавлена команда глобального разрешения прерывания. Раздел «Главная программа» содержит замкнутую в бесконечный цикл цепочку команд вызова соответствующих подпрограмм, включая подпрограмму задержки в 1 секунду. В разделе «Подпрограммы» приведен программный код для процедур в соответствии с граф-схемой Рис. 3.45,6, программный код подпрограмм управ- ления светодиодным дисплеем (см. задачу 20), а также код для подпрограммы за- держки. Для формирования задержки в 1 секунду использовано 100-кратное пов- торение интервала времени 10000 мкс. Последний формируется таймером 0 с об- наружением переполнения путем опроса флага. Код, приведенный в разделе «Подпрограммы обработки прерываний» для подпрограммы обработки прерыва- ний от ADC0, построен согласно граф-схеме Рис. 3.45,6. В разделе «Таблицы» в конце исходного кода определена таблица 7-сегментных кодов, аналогичная таб- лице из задачи 20. Задача 27. Разработать подпрограмму для генерирования синусоидального напряжения частотой 10 Гц с помощью встроенного цифро-аналогового преобра- зователя. Для вычисления значений синуса использовать алгоритм просмотра таблиц, шаг по фазе — 5 градусов. С учетом особенностей встроенного ЦАП можно сформировать синусоидаль- ное напряжение амплитудой около 1.2 В с положительным смещением 1.2 В, как это показано на Рис. 3.47,а. Если использовать для кодирования значений сину- соидальной функции 8 бит, то цифровая амплитуда синусоидального сигнала в десятичном выражении составит 127. Период сигнала, как показано на рисунке, разбивается на 4 квадранта (1, 2, 3, 4), характеризуемых симметрией. Благодаря симметрии в памяти МК достаточно хранить значения амплитуды функции 127 sin 0 только для первого квадранта (0- фаза). Эти значения приведены в таблице, показанной на Рис. 3.47,6. Всего в таблице будет 19 значений, которым можно присвоить индекс INDEX от 0 до 18. Для идентификации квадрантов можно ис- пользовать две булевых переменных: флаг знака SGN (sign) и флаг направления DIR (direction). Значения первого соответствуют знаку амплитуды, а значения второго - направлению изменения индекса (0 — инкремент, 1 — декремент). Пол пый период синусоидального сигнала содержит 72 шага по фазе, причем фазам
3.8. Использование аналоговых периферийных устройств 90, 180, 270 и 360 градусов соответствуют числа шагов 18, 36, 54 и 72. Число шагов фазы можно учитывать с помощью переменной STEP. Структура данных для задачи генерирования синусоидального сигнала пока зана на Рис. 3.47,в. Переменную STEP, которую нужно постоянно сравнивать с непосредственными значениями, для упрощения программного кода лучше р i i местить в одном из регистров рабочего банка, а переменную INDEX можно опрс делить во внутренней памяти данных типа DATA. Флаги SGN и DIR можно раз местить также во внутренней памяти данных в сегменте BIT а) Фаза0 [градус] 127 sin 0 Фазае [градус] 127 sin 0 0 0 50 97 5 11 55 104 10 22 60 109 15 32 65 115 20 43 70 119 25 53 75 122 30 63 80 125 35 72 85 126 40 81 90 127 45 89 б) REGISTERS STEP 1 1 DATA INDEX 1 1 BIT SGN □ DIR □ /*и<. Генератор синусоидального сигнала: а) принцип формиропаппи; (>) ыблпца Jiia'iciiini; и) структура данных.
Глава 3. Проектирование аппаратных и программных средств 7 х STEP =18? Да 8------- SGN = O DIR = 1 Нет 9 \ STEP = 36? Да -10------- SGN = 1 DIR = 0 Нет 11 \ STEP = 54? Да 12------- SGN = 1 DIR = 1 Нет 13 X STEP = 72? Да 14------- SGN = O DIR = 0 STEP = 0 Переключение квадранта Puc.3.48. Генератор синусоида ibiioiо сш пала: граф-схема алгоритма.
•3.S. Использование аналоговых периферийных устройств Для формирования времени шага можно использовать один из таймеров, па пример таймер 2. Период переполнения таймера должен быть равен 100000/72 мкс (см. Рис. 3.47,а). Все функции по формированию синусоидального сигнала можно выполнить с помощью процедуры обработки прерывания TMR21SR, граф-схема которой приведена на Рис. 3.48. Кроме традиционного оператора очистки флага прерыва ния (1) эта процедура включает три последовательных блока: вычисления ампли туды синуса и вывод, переключения квадранта, модификации аргумента и индек- са таблицы. В первом блоке производится считывание значения синусоидальной функции из таблицы в соответствии с текущим значением индекса (2), затем если флаг знака имеет состояние логической 1 (т. е. минус), то производится преобра зование табличного значения в дополнительный код (4). После суммирования значения со смещением 80Н (5) можно переслать результат в старший регистр ЦАП (6). В блоке переключения квадранта выполняются проверки границ квад рантов (7, 9, 11, 13) и, если необходимо, производится переключение квадрата (8, 10, 12, 14). При достижении конца периода формирования синусоидального сигнала кроме переключения квадранта необходимо реинициализировать пере- менную STEP (14). И наконец, последний блок включает инкремент шага STEP (15), а затем в зависимости от направления D1R (16) инкремент (17) или декре- мент (18) индекса. Конфигурирование МК для данной задачи включает запрет сторожевого тай мера (см. описание к задаче 1), а также конфигурирование цифро-аналогового преобразователя DAC0 и таймера 2. Для этого с помощью мастера конфи гура ции (Configuration Wizard 2) можно открыть окно конфигурации цифро-аналого- вых преобразователей DAC и на вкладке DAC0 установить флажок разрешения Enable DACO и выбрать опцию левого выравнивания DAC0H[7:0] : DAC0L|7:4|, как показано на Рис. 3.49. Затем надо нажать кнопку конфигурирования источ ника опорного напряжения (Configure Voltage Reference), что вызывает откры тие окна конфигурации источника опорного напряжения Voltage Reference (см. Рис. 3.46). В этом окне надо установить два флажка: разрешения внутреннего ге- нератора смещения Enable Internal Bias Generator и разрешения буферного уси лителя опорного генератора Enable Internal Reference Buffer (см. п. 1.10.3 на стр. 106), после чего нажать кнопку ОК, что возвращает процесс к конфигурирова пию DAC0. Нажатие кнопки ОК в окне DAC завершает конфигурирование пре- образователя. Для конфигурирования таймера необходимо открыть окно тайме ров Timers. На вкладке Timer 2 необходимо выбрать опцию синхронизации SYSCLK и установить флажок разрешения Enable Timer, затем нажать кнопку конфигурации прерываний (Configure Timer Interrupts), что вызывает откры гие окна конфигурации прерываний Interrupts. Там надо установить флажок разре тения прерываний Enable Timer 2 Interrupt и нажать кнопку ОК, что возврата ст процесс к продолжению конфигурирования таймера 2. Далее надо ввести на чалыюе (Timer Initial Value) и перезагружаемое (Timer Reload Value) значения для Алиного таймера, рассчитанные с учетом тактовой частоты SYSCLK = 2 МГц, как ло показано на Рис. 3.49 Нажагпе кнопки ОК завершает конфи гурирова пне МК. После этого код конфигурации, сохраненный в файле Sine conf, содер
Глава 3. Проектирование аппаратных и программных средств РАС ............................... ® ОАСО | DAC1 ] DAC Enable V Enable DACO ч____________________________ pata Format ** DAC0H[3.0], DAC0L[7:0[ PAC0H[4:°l: DACOLRI] r !^вииииш r DAC0HlE:°]: DAC0Lp;3] £• DAC0H[7 0].DAC0L]7:4] ипижмиип r ri i DACOCN «0x84; Update Source Select DAC output updates on: С T imer 2 overflow Timer 3 overflow f Timer 4 overflow i* write to DACOH Voltage Reference Internal Bias Generator is On. Configured Properly Configure Voltage Reference OK I Cancel I Reset Pitc. 3.49. ГенераторCHiiycDiuia-'iiiiiiirociuiia;ia: конфигурация MK
•3.S. Использование аналоговых периферийных устройств жит пять подпрограмм: конфигурации источников сброса, конфигурации тайме ров, конфигурации цифро-аналоговых преобразователей, конфигурации опор ного напряжения и конфигурации прерываний. Исходный код для генератора синусоидального сигнала, сохраненный под именем Sine, приведен ниже. ; Задача 27: Генератор синусоидального сигнала Sine.ASM ;--------------- Глобальные/локальные переменные ---- SINCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) — Константы STEP equ R7 ; Относительная фаза (шаг = 5 градусов) / — Сегменты my_stack segment idata rseg my_stack ds 10h d_ seg SEGMENT DATA RSEG d_seg INDEX: ds 1 ; Индекс таблицы значений синуса b_seg SEGMENT BIT RSEG b_seg SGN: dbit 1 ; Знак значения синуса DIR: dbit 1 ; Направление изменения индекса cseg at 0 r org 00h ; Вектор сброса LJMP Config org 02Bh ; Вектор таймера 2 LJMP TMR2_ISR org 0B3h ; Конец области прерываний t Config: mov sp,#my_stack-l ; Инициализация стека Icall Init_Device ; Вызов подпрограммы конфигурации mov STEP,#0 ; Инициализация переменных и флагов mov INDEX,#0 clr SGN clr DIR mov DPTR,#SIN ; Установка базового адреса таблицы setb ЕА ; Разрешить прерывания I sjmp $ ГТгх rr r i н ив и nnoni юзит/т/ 1 - ПОДЛрО! ptJWMbJ UUpaUUlKH 1 хрсрЫЬсдНкШ TMR2_ISR: clr TF2 ; 1. Очистить флаг TF2 mov л, INDEX ; 2 .Читать значение из таблицы SIN [INDEX]
Глава 3. Проектирование аппаратных и программных средств move a,@a+dptr jnb cpl inc SGN,add80h ; a ; a : 3.SGN = 1? : 4.Преобразовать в дополнительный код add80h: add mov cjne clr setb sjmp a,#80h ; DAC0H,a ; STEP,#18,step36 ; SGN ; DIR incs : 5.Прибавить смещение 80h : 6.Переслать в DAC0H : 7.STEP =18? 8.SGN = 0,DIR = 1 Step36: cjne setb clr sjmp STEP,#36,step54 ; SGN ; DIR incs : 9.STEP = 36? : 10.SGN = 1,DIR = 0 step54: cjne setb setb sjmp STEP,#54,step72 ; SGN ; DIR incs 11.STEP = 54? : 12.SGN = 1,DIR = 1 Step72: cjne clr clr mov STEP,#72,incs ; SGN ; DIR STEP,#0 : 13.STEP = 72? : 14.SGN = 0,DIR = 0,STEP = 0 incs: inc jb inc sjmp STEP ; DIR,deci ; INDEX ; ext : 15.Инкремент STEP : 16.DIR = 1? 1 17.Инкремент INDEX deci: ext: dec reti INDEX ; 1 18.Декремент INDEX — Таблицы - — SIN: db db 0,11,22,32,43,53,63,72,81,89; Таблица синуса 97,104,109,115,119,122,125,126,127 END В разделе «Сегменты» определен переместимый сегмент DATA, в котором за- резервирован 1 байт для переменной INDEX, и переместимый сегмент BIT, в ко- тором определены флаги SGN и DIR. В разделе «Векторы прерываний» в допол- нение к традиционному вектору сброса определен вектор прерывания таймера 2 в соответствии с Табл. 1.4. В разделе «Код инициализации» добавлены команды инициализации переменных и флагов, команда загрузки в указатель данных ба- зового адреса таблицы и команда глобального разрешения прерывания. Раздел «Главная программа» содержит только «заглушку» — команду бесконечного цик- ла, так как все заданные функции реализуются в подпрограмме обработки пре- рывания таймера 2. Код, приведенный в разделе «Подпрограммы обработки прерываний» для подпрограммы обработки прерываний от таймера 2, построен согласно граф-схеме Рис. 3.48. В разделе «Таблицы» в конце исходного кода оп- ределена таблица значений синусоидальной функции (см. таблицу па Рис. 3.47,6).
3.9. Цифровая обработка сигнала 3.9. Цифровая обработка сигналов Задача 28. Разработать подпрограмму, выполняющую функцию цифровой FlR-фильтра (Finite Impulse Response Filter - фильтр с импульсной характернейi кой конечной длительности) аналогового сигнала. Разрядность выборок — 8 бш частота выборок — 50 кГц. Цифровая обработка сигналов реализуется аппаратной структурой, приведен ной на Рис. 3.50,а. Микроконтроллеры фирмы Silicon Laboratories содержа! щ кристалле все блоки этой схемы, следовательно, с успехом могут быть исполню ваны для построения цифровых фильтров. Одним из вариантов реализации такого фильтра является FlR-фильтр 112] логическая структура которого приведена на Рис. 3.50,6. Согласно этой схеме можно получить выражение, описывающее работу фильтра: yn = Xhi-xn-i, (3.10) . с где у,, - выходная выборка, хп — входная выборка, h, — коэффициенты фильтра, N — длина или порядок фильтра. Из формулы (3.10) следует, что для вычисления очередной выходной выборки уп требуется N последних выборок х и N коэффициентов. Поэтому структура данных для такой задачи будет включать циклический буфер входных данных X, размещенный в переместимом сегменте IDATA внутренней памяти данных, и таблицу коэффициентов Н, размещенную в программной памяти, оба размером N байт, как это показано на Рис. 3.50,в. Кроме того, в регистрах активного банка необходимо разместить указатель входного буфера X PTR, индекс циклического буфера C1R1ND, выходную выборку Y и индекс таблицы INDEX. Содержимое регистра DPTR, как обычно, используется командой просмотра таблиц как базовый адрес таблицы. Регистры специальных функций — ADC0H и DAC01I используются, соответственно, как регистры входной (INPUT) и выходной (OUTPUT) выборок. Основной процедурой фильтра является подпрограмма обработки прсрыва пия АЦП, запускаемого таймером с требуемой частотой выборок. Граф-схема ап горитма этой процедуры приведена на Рис. 3.51. Кроме оператора очистки флага прерывания (1) алгоритм включает оператор инициализации (2), считывания входной выборки и сохранения ее в циклическом буфере (3), цикл фильтр щии, и котором вычисляется значение выходной выборки Y, и вывод ее в виде уровня аналогового сигнала на выход ЦАП (8). Цикл фильтрации реализует выражение (3.10) и включает оператор считывания коэффициента из таблицы (4), умпоже пня па входную выборку из циклического буфера (5), сложения произведения с Y ((>) и проверку необходимост продолжения вычислений (7). Если необходимо продолжить, то npoit щоднтся инкремент индекса таблицы (9) и циклический ип кремент индекса циклическою ovilfcp;1 (10, 11).
Глава 3. Проектирование аппаратных и программных средств а) I I Y в) Рис. 3.50. Цифровой FIR-фильтр; а) аппаратная структура; б) логическая структура; в) структура данных. Конфигурирование МК для данной задачи включает запрет сторожевого таи мера (см. описание к задаче 1), а также конфигурирование аналого-цифрово! о преобразователя ADCO, цифро-аналогового преобразователя DACO и таймера 2 Для этого с помощью мастера конфигурации (Configuration Wizard 2) нужно oi крыть окно ADCs (Рис. 3.52) и на вкладке ADCO установить флажок разрешения Enable ADCO и выбрать опцию запуска от таймера 2 (on overflow of Timer 2). Пос ле лого нажать кнопку конфигурации прерываний (Configure ADC Interrupts), что ньнываетоткрытие окна конфигурации прерываний Interrupts. Там надо уста повить флажок разрешения прерываний Enable ADC01NT Interrupt и нажать
3.9. Цифровая обработка сигнала. Рис. 3.51. Цифровой FIR-фильтр: граф-схема алгоритма. кнопку ОК, что возвращает процесс к продолжению конфигурации ADCO. Затем надо нажать кнопку конфигурации источника опорного напряжения (Configure Reference Control), что вызывает открытие окна конфигурации источника опор ного напряжения Voltage Reference. В этом окне надо установить два флажка р 11 решения внутреннего генератора смещения Enable Internal Bias Generator и pa зре шения буферного усилителя опорного генератора Enable Internal Reference Buffer (см. п. 1.10.3 на стр. 106), после чего нажать кнопку ОК, что возвращает процесс к конфигурированию ADC0. Далее нужно нажать кнопку изменения тактовой час готы преобразователя Change SAR и выбрать необходимую частоту, например 1000000 Гц. Встроенный калькулятор немедленно вычислит необходимое зпаче пне управляющего кода AD0SC для загрузки в регистр управления преобразова геля (см. Рис. 3.52). И наконец, необходимо установить флажок левого выравпн палия результата Left justify ADC0H:ADC0L registers. Нажатие кнопки ОК завср тает процесс конфигурирования ADC0. Далее следует открыть окно конфигурации цнфро аналоговых преобразователей DAC и па вкладке DAC0 ус ганошт. флажок разрешения Enable DACO и выбрать опцию левого выравиппа
Глава 3. Проектирование аппаратных и программных средств ADCs АОСО ]дОС1 | ADC Enable Enable ADCO Track Mode <•’ Continuous Tracking f ’ Tracking defined by ADOCM ADC Interrupt ADCO Interrupt is Enabled ADCO Window Interrupt is Disabled Configure ADC Interrupts j Start of Conversion Mode [ADOCM] ADC conversion initiated every write of T to AD0BUSY <• on overflow of T imer 2 Г* on overflow of T imer 3 Г on rising edge of CM VS T R Reference Control Internal Bias Generator is On, Configured Properly Internal Reference Buffer is On Contigure Reference Control! ADC MUX Selection r . . 7 6 5 4 3 2 1 0 Set Differential | г ’|’т । ] у у Pairs in Al NO. Input Channel: |aiNOO Internal Amplifier Gain Gain - 0.5 Gain 4 Gain 1 C Garn - 8 C" Gain - 2 C Gar = 16 Configure Port 1/0 | SAR Conversion Clock ProgrammableWindow Detector High : Low Greater Than- | рр | FF Less Than. | 00 | ~0£Г Hz Change SAR | ADOSC Value (Hex) | 01 {S’ Left justify AD COH :AD COL registers ADCOCF 0x08 ADCOCN =0x8D. DAC DACO ] DAC1 | DAC Enable Enable DACO Update Source Select DAC output updates on: f*' Timer 2 overflow f' Timer 3 overflow Timer 4 overflow (• write to DACOH Data Format Г РДС0Н[3:0]:РАС0Ц7.0] DACOH[4:O]:DACOI47:1] DAC0HI5Q]: DAC0L[7:2] Voltage Reference Г РАС0Н[6:0|:РАС0Ц7:3] Internal Bias Generator is On. Configured Properly & DACOHRO]: DAC0L[7:4] Configure Voyage Reference | DACOCN =0x84; OK | Cancel | Reset Puc. 3.52. Цифровой I IK фильтр: конфигурация МК.
3.9. Цифровая обработка сигналов ния DAC0H[7:0] : DAC0L[7:4|, как показано на Рис. 3.52. Нажатие кнопки ОК в окне DAC завершает конфигурирование преобразователя. Для конфигурирова ния таймера необходимо открыть окно таймеров Timers. На вкладке Timer 2 необ- ходимо выбрать опцию синхронизации SYSCLK и установить флажок разрешс ния Enable Timer. Далее надо ввести начальное (Timer Initial Value) и перезагружа емое (Timer Reload Value) значения для данного таймера — FFD8H, рассчитанные с учетом частоты SYSCLK = 2 МГц и времени переполнения 20 мкс. Нажатие кнопки ОК завершает конфигурирование МК. После этого код конфигурации, сохраненный в файле DSPconf, содержит шесть подпрограмм: конфигурации источников сброса, конфигурации таймеров, конфигурации аналого-цифровых преобразователей, конфигурации цифро-аналоговых преобразователей, конфи гурации опорного напряжения и конфигурации прерываний. Исходный код для цифрового FlR-фильтра, сохраненный под именем DSP, приведен ниже. ; Задача 28: Цифровой FIR-фильтр ;DSP.ASM ;--------------- Глобальные/локальные переменные ---- $INCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) — Константы - — X_PTR equ RO ; Указатель циклического буфера Y equ R5 ; Выходная выборка CIR_IND equ R6 ; Индекс циклического буфера INDEX equ R7 ; Индекс таблицы коэффициентов INPUT equ ADCOH ; Вход фильтра OUTPUT equ DACOH ; Выход фильтра N equ 5 ; Порядок фильтра 1 — Сегменты - — my_stack segment idata rseg my_stack ds lOh i_seg SEGMENT IDATA RSEG i_seg X: DS N ; Циклический буфер cseg at 0 Векторы прерываний org LJMP org ljmp org 00h Config 007Bh ADC0_ISR 0B3h ; Вектор сброса ; Вектор ADCO ; Конец области прерываний 1 Config: mov sp,#my_Btack-l ; Инициализация стека Icall Inil_D- vie» ; Вызов подпрограммы конфигурации mov CIR_IND,»0 ; Обнулить индекс буфера
Глава 3. Проектирование аппаратных и программных средств setb ЕА ; Разрешить прерывания ---------- Главная программа ------------------- sjmp $ Подпрограммы обработки прерывании ADC0_ISR: clr ADOINT 1.Очистить флаг ADOINT mov DPTR,#H 2.Инициализация mov INDEX,#0 mov Y,#0 1 mov a,#X З.Ввод X[CIR_IND] = INPUT add a,CIR_IND mov X_PTR,a mov @X_PTR,INPUT Filt: mov a,INDEX 4.Читать коэффициент H[INDEX] move a,@a+DPTR mov b,a mov a, #X 5.Умножить X[CIR_IND] add a,CIR_IND mov X_PTR,a mov a,@X_PTR mul ab mov a,b ; Округлить add a,Y 6.Прибавить к Y mov Y,a cjne INDEX,#N-1,iind 7.INDEX = N-1? mov OUTPUT,Y 8.Вывод OUTPUT = Y reti iind: inc INDEX 9.Инкремент INDEX inc CIR_IND 10.Инкремент CIR_IND cjne CIR_IND,#N,Filt ll.CIR_IND mod N mov CIR_IND,#0 sjmp Filt — Таблицы - — Н: db 100,50,50,31,25 Таблица коэффициентов END В разделе «Константы» присвоены символические имена соответствующим регистрам МК и определен порядок фильтра N = 5 . В разделе «Сегменты» опре делен переместимый сегмент IDATA, в котором зарезервировано N байт для вы борок X. В разделе «Векторы прерываний» в дополнение к традиционному векто ру сброса определен вектор прерывания преобразователя ADCO в соответствии с Табл. 1.4. В разделе «Код инициализации» добавлены команды обнуления индск са циклического буфера и команда глобального разрешения прерывания. Раздел «Главная программа» содержит только «заглушку» — команду бесконечного ник ла, так как все заданные функции реалн зуются в подпрограмме обработки нреры вапия преобразователя ADCO. Код, приведенный в разделе «Подпрограммы об
3.10. Программирование энергонезависимой памяти работки прерываний» для преобразователя ADCO, построен в соответствии с граф-схемой Рис. 3.51. В разделе «Таблицы» в конце исходного кода определена таблица коэффициентов фильтра. 3.10. Программирование энергонезависимой памяти Задача 29. Разработать подпрограммы для считывания и записи рабочей энер- гонезависимой памяти. Как было описано ранее (см. п. 1.2.1 на стр. 23 и Рис. 1.4), энергонезависимая память программ имеет область так называемой рабочей памяти, предназначен ной для хранения данных (например, калибровочных коэффициентов и т. и.). Размер этой области составляет 128 байт. В процессе работы микроконтроллер- ной системы бывает необходимо изменить значения некоторых байтов. Для эюй цели необходимо переслать блок из 128 байт, например, во внутреннюю память данных, т. е. открыть его для записи, а после коррекции необходимо вернуть его обратно в рабочую память, т. е. закрыть. Графический анализ задачи приведен на Рис. 3.53,а. Доступ к рабочей памя гп осуществляется с помощью указателя DPTR, если установлен бит SFLE в регио ре PSCTL (см. Рис. 1.5). При этом считывание производится командой MOVC, а запись — командой MOVX, при условии, что установлен бит PSWE регистра PSCTL (см. Рис. 1.5). Доступ к внутренней памяти данных осуществляется с по- мощью указателя i_address (R0). Все пересылки выполняются через аккумулятор А. Переменная size (Rl) — размер блока — используется как счетчик цикла. Граф-схемы процедур открытия блока OPEN и закрытия блока CLOSE приве- дены на Рис. 3.53,6. Процедура OPEN весьма проста и включает: оператор иници- ализации указателей и счетчика цикла (01), оператор разрешения доступа к рабо чей памяти (02), цикл пересылки, содержащий собственно оператор пересылки (03) и проверку на конец цикла (04) и оператор запрета доступа к рабочей памя ги (05). Процедура CLOSE связана с записью в энергонезависимую память и требует значительного времени (временные соотношения регулируются аппаратными средствами МК) и является более сложной. После аналогичной инициализации (С I) необходимо запретить прерывания (С2), затем разрешить запись вэнергоне Зависимую память из программы пользователя (СЗ). Инициализация самого пик ла пересылки данных включает 3 оператора: разрешения стирания/записи и до ступа к рабочей памяти (С4), стирания рабочей памяти (С5) и запрещения сгпра ния (С6). Цикл пересылки построен аналогично вышерассмотренной процедуре и включает оператор пересылки байта (С7) в обратном направлении и проверку конца цикла (С8). По окончании цикла необходимо восстановить исходное сое го яние: запретить запись и доступ к рабочей памяти (С9), запретить запись в опер гон 'зависимую и тмягь (CIO) п ра грешить прерывания (СИ). Копфигуриров nine МК выполнено аналогично конфигурированию в первых примерах (см. описание к «даче 1) в код конфигурации сохранен в файле FLASH conf.
Глава 3. Проектирование аппаратных и программных средств Инициализация гС1 Инициализация Разрешить доступ к рабочей памяти г-С2 - Запретить прерывания г03 Переслать байт [- сз —- Разрешить запись в энерго- независимую память Разрешить стирание/запись и доступ к рабочей памяти I-C5 Стереть рабочую память Запретить доступ к рабочей памяти [-С6 Запретить стирание б) Рис. 3.53. Программирование л1сргонезависимой памяти: а) анализ задачи; б) раф-схсма алгоритма
3.10. Программирование энергонезависимой памяти Исходный код для процедур программирования энергонезависимой памяти, сохраненный под именем FLASH, приведен ниже. ; Задача 29: Программирование энергонезависимой памяти ;FLASH.ASM .--------------- Глобальные/локальные переменные ---- SINCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) t — Константы — — i_address equ RO Указатель внутренней памяти данных size equ R1 Размер блока FLWE equ 01H Маска разрешения записи в э/н память t из программы SFLE equ 04H Маска разрешения доступа к рабочей памяти PSEE equ 02H Маска разрешения стирания во FLASH память PSWE equ 01H Маска разрешения записи во FLASH r память t — Сегменты — — my_stack segment idata rseg my_stack ds lOh i_seg SEGMENTI DATA RSEG i_seg Block: DS 128 Блок cseg at 0 1 org OOh Вектор сброса LJMP Config org 0B3h Конец области прерываний ! Config: mov sp,#my_stack-l ; Инициализация стека Icall Init_Device ; Вызов подпрограммы конфигурации call OPEN Открыть блок Здесь можно изменить содержимое блока call CLOSE Закрыть блок sjmp $ J OPEN: mov i_address,#Block ; 01.Инициализация mov dptr,#0 mov size,#126 orl PSCTL,#SFLE 02.Разрешить доступ к рабочей памяти xto: clr 03.Переслать байт move a.ftHldptr
Глава 3. Проектирование аппаратных и программных средств mov inc inc djnz anl ret @i_address,a i_address dptr size,nexto PSCTL,#not SFLE ; 04.Конец цикла? ; 05.Запретить доступ к рабочей памяти CLOSE: mov i_address,#Block ; С1.Инициализация mov mov clr dptr,#0 size,#128 EA ; С2.Запретить прерывания orl FLSCL,#FLWE ; СЗ.Разрешить запись в э/н память orl PSCTL,#PSEE or PSWE or SFLE movx @dptr,a ; С4.Разрешить стирание/запись и доступ ; к рабочей памяти ; С5.Стереть рабочую память anl PSCTL,#not PSEE ; С6.Запретить стирание nextc: mov a,@i_address ; С7.Переслать байт movx inc inc djnz Sdptr,a i_address dptr size,nextc ; С8.Конец цикла? anl PSCTL,#not (PSWE or SFLE) anl FLSCL,#not FLWE ; С9.Запретить запись и доступ к ; рабочей памяти ; СЮ.Запретить запись в э/н память setb EA ; СИ.Разрешить прерывания ret END В разделе «Константы» присвоены символические имена соответствующим регистрам МК и определены маски для доступа к соответствующим управляю- щим битам в небит-адресуемых регистрах специальных функций. Назначение масок поясняется комментариями. В разделе «Сегменты» определен перемести- мый сегмент 1DATA, в котором зарезервировано 128 байт для блока данных. В разделе «Код инициализации» добавлена команда вызова подпрограммы OPEN, после которой можно изменить содержимое блока. Раздел «Главная программа» содержит зарезервированное место, в котором можно вписать команды измене иия содержимого блока, и команду вызова подпрограммы CLOSE. В конце разде- ла записана точка останова — команда бесконечного цикла. Код, приведенный в разделе «Подпрограммы», построен в соответствии с граф-схемой Рис. 3.53. Под робные комментарии позволяют понять, какие команды используются для коли рования блоков алгоритма. Для кодирования операндов команд установки/сбро са управляющих битов в небит-адресуемых регистрах используются вычисляемые ассемблером логические операции над масками.
3.11. Проектирование алгоритмов управления на основе конечно-автоматных моделей 3.11. Проектирование алгоритмов управления на основе конечно-автоматных моделей Показатели эффективности программного кода, такие, как требуемый объем памяти, время выполнения, сопровождаемость (т. е. свойство, позволяющее лег- ко сопровождать программный продукт на всех этапах его изготовления: проек тирование, отладка, внесение изменений, устранение ошибок во время эксплуа тации и т. п.), зависят от структуры алгоритмов. Алгоритмы управляющих систем имеют, как правило, циклическую структуру. Процессам управления в сложных системах свойственно также наличие нескольких внутренних состояний и опре- деленного количества событий, вызывающих изменение состояний системы уп равления и изменение ее функций. Поэтому для моделирования таких систем ус- пешно применяются конечно-автоматные модели. Совершенно очевидно, что алгоритм работы системы тоже является ее моделью и может быть построен фор мально на основе конечно-автоматной модели системы. Такой подход позволяет получить алгоритм с оптимальной структурой, практически свободный отлоги ческих ошибок, так как предварительное построение конечно-автоматной моде- ли позволяет детально проанализировать функционирование системы состояние за состоянием. Также легко идентифицировать ошибки на фазе отладки програм мы и вносить изменения в законченный продукт или устранять обнаруженные в период эксплуатации ошибки. Все это дает основание рекомендовать разрабог чикам микроконтроллерных систем использовать такой метод [13]. Наиболее подходящей моделью алгоритмов явля- ется конечный автомат Мура. Наглядной формой представления такого конечного автомата является граф переходов. На графе переходов с помощью вер- шин изображают состояния автомата, а с помощью рсбер — переходы. Пример графа перехода конечного автомата приведен на Рис. 3.54. Конечный автомат имеет 4 состояния: А, В, С, D, из которых А — началь- ное состояние (помечено стрелкой инициализации), a D — конечное (помечено двойным кружком). Сле- дует отметить, что начальное состояние обязательно, а пог конечного может и не быть. Переходы между со- стояниями представлены направленными ребрами. Каждое такое ребро номече но входным сигналом конечного автомата, вызывающим такой переход (Х|,..., хх). Функционирование автомата Мура сводится к тому, что в каждом состоянии он генерирует определенный выходной сигнал, а при наличии соответствующею входного сигнала совершает переход в другое состояние. В реальной МК-систсме каждое состояние характеризуется выполнением он ределепного набора функции; это и есть выходне н сш нал автомата Входные сш налы — эго вычисляемые логические; условия, функции внутренних переменных н состоянии физических входов МК Рис. 3.54. Граф переходов конечного автомата
Глава 3. Проектирование аппаратных и программных средств Подпрограмма обработки прерывания таймера синхронизации ( Прерывание Вычисление Xi Г Вычисление Х8 I ( RETI ) Рис. 3.55. Граф-схема программы конечного автомата.
3.11. Проектирование алгоритмов управления на основе конечно-автоматных моделей Есть два принципиальных подхода к построению конечных автоматов (в гом числе и аппаратных): асинхронный и синхронный. Если переход автомата осу ществляется непосредственно в момент активного фронта входного сигнала, тс автомат можно классифицировать как синхронный. Если моменты переход) «привязаны» к сигналам синхронизации, то автомат называют синхронным Единственным преимуществом асинхронного автомата является его быстродсйс твне, однако его поведение при разбросе параметров компонентов менее пред- сказуемо, следовательно, он менее надежен. Сам МК также является конечным автоматом, причем синхронным. Частота синхронизации МК составляет десятки МГц, а время выполнения команд — доли микросекунды. Поэтому для построс ния систем управления на базе МК больше подходит синхронная модель, а нерп од синхронизации можно формировать с помощью одного из встроенных тайме ров. Последнее дает возможность для каждой конкретной задачи выбрать гребус мую частоту синхронизации. При наличии отработанной конечно-автоматной модели граф-схема ал горн i ма работы МК системы может быть получена формально. На Рис. 3.55 приведена граф-схема алгоритма для модели Рис. 3.54. После старта и глобальной инициа- лизации (включая конфигурирование МК) система переходит в начальное соею яние А. Схема каждого из состояний представляет собой цикл, включающий онс ратор инициализации состояния, операторы функций состояния в теле цикла и проверки входных сигналов автомата на выходе из цикла. Если входные сигналы не активны, то цикл продолжается, т. е. автомат сохраняет текущее состояние; ес • ли активны, то совершает переход. Следует отметить, что если присутствует не- сколько активных сигналов одновременно, то при использовании схемы на Рис. 3.55 возникает определенный порядок приоритета. Оператор останова име ется только в конечном состоянии. Вычисление значений входных сигналов про изводится в подпрограмме обработки прерываний от таймера синхронизации. Ряд примеров, приведенных в главе 4, детально показывает использование метода конечно-автоматных моделей при проектировании МК систем управле ния различными объектами.
Примеры построения измерительных и управляющих систем на базе МК SiLabs Проекты, рассмотренные ниже, демонстрируют применение метода форма- лизации разработки алгоритмов па основе конечно-автоматных моделей, а также применение алгоритмов и методов кодирования программ, рассмотренных в главе 3. На прилагаемом компакт-диске в папке Source для каждого проекта запи- сан файл конфигурации и исходный код. 4.1. Система управления светофорами на пешеходном переходе Задача 30. Разработать программное обеспечение для системы управления светофорами на пешеходном переходе (Рис. 4.1,а). На пешеходном переходе размешены два светофора для транспорта, управляе- мыесигналами: R(RED) — красный, Y(YELLOW) — желтый, G (GREEN) — зеленый; а также два светофора для пешеходов, управляемые сигналами: rd — красный, gr — зе- леный. Кроме того, перекресток оборудован кнопками запроса перехода si и s2. Нетрудно убедиться в том, что система управления должна работать, как ко- нечно-автоматная модель, граф переходов которой показан на Рис. 4.1,6. Генери- руемые в каждом из состояний выходные сигналы указаны на выносках. Система имеет четыре состояния: GREEN (включен зеленый сигнал для транспорта и красный — для пешеходов), YELLOW (включен желтый сигнал для транспорта и красный — для пешеходов), RED (включен красный сигнал для транспорта и зе- леный — для пешеходов) и YELRED (включены красный и желтый сигналы для транспорта и красный - для пешеходов). Входными сигналами системы являю! ся сигнал нажатия на одну из кнопок запроса перехода S = si V S20, а также вну i реннин флаг окончания отсчета заданного времени Tend. 11V операция ИЛИ, ди нлопкция
4.1 Система управления светофорами на пешеходном переходе б) Рис. 4.1. Система управления светофорами на пешеходном переходе: а) схема системы; б) конечно-автоматная модель. Сразу после сброса система переходит в состояние GREEN, в котором вклю чей зеленый сигнал для транспорта и красный - для пешеходов. После нажатия кнопки, если прошло не менее 10 секунд после возврата системы в состояние GREEN, (S х lend) ciicieMa переходиi в состояние YELLOW и включает желтый
Глава 4. Примеры построения измерительных и управляющих систем на базе МК SiLabs свет для транспорта, для пешеходов продолжает гореть красный сигнал. Транс- порт останавливается. Через 5 секунд (Tend) система переходит в состояние RED и включает красный свет для транспорта и зеленый — для пешеходов. Пешеходы переходят дорогу. Через 20 секунд (Tend) система переходит в состояние YELRED, включает красный свет для пешеходов и красный вместе с желтым — для транспорта. Пешеходы завершают переход, а транспорт готовится начать дви- жение. Еще через 5 секунд (Tend) система возвращается в состояние GREEN и снова ожидает нажатия на кнопку запроса перехода. Таким образом, модель адек- ватно описывает требуемое поведение системы (длительность временных интер- валов выбрана условно). Формально построенные в соответствии с моделью граф-схемы главного ал- горитма управления светофорами TRAFFIC_LIGHT и процедуры обработки пре- рывания ISRTM3 приведены на Рис. 4.2. Поскольку основной функцией каждо- го из состояний является сохранение управляющих сигналов, заданных операто- ром инициализации, тело цикла не содержит операторов. Исключение можно сделать только для состояния RED, когда пешеходы переходят дорогу. В этот мо- мент нужно очищать флаг запроса перехода, так как эти запросы удовлетворяют- ся именно в этом состоянии и новые запросы являются ложными. В процедуре обработки прерывания вычисляется входной сигнал S = si V s2, производится де- кремент переменной отсчета времени TIME и установка флага Tend, если она равна после этого 0. С учетом требуемых временных интервалов время перепол- нения таймера можно выбрать равным 100 мс. Конфигурирование МК для данной задачи включает запрет сторожевого тай- мера (см. описание к задаче 1), а также конфигурирование таймеров и портов ввода/вывода. Для этого с помощью мастера конфигурации (Configuration Wizard 2) можно открыть окно Timers и на вкладке Timer 3 нажать кнопку конфи- гурации прерываний (Configure Timer Interrupts), что вызывает открытие окна конфигурации прерываний Interrupts. Там надо установить флажок разрешения прерываний Enable Timer 3 Interrupt и нажать кнопку ОК, что возвращает провесе к продолжению конфигурации таймера 3. Далее надо установить флажок разре- шения таймера Enable Timer и ввести начальное (Timer Initial Value) и перезагру- жаемое (Timer Reload Value) значения для данного таймера, рассчитанные с уче- том частоты SYSCLK = 2 МГц, коэффициента предделения SYSCLK/12 и време- ни переполнения 100 мс: Timer Reload Value = 65536 — 100000-2/12 ~ 48869 = ВЕЕ5Н. Вид окна Timers после конфигурирования показан на Рис. 4.3. Нажатие кпоп ки ОК в этом окне завершает конфигурирование таймеров. Затем можно откры ть окно Port I/O, выбрать для выводов портов Pl.3, Pl.4, Pl.5, Р1.6 и Р1.7 режим Push-Pull и установить флажок Enable Crossbar (см. Рис. 4.3). Нажатие кнопки ОК в этом окне завершает конфигурацию МК. После этого код конфигурации, со храненный в файле TrafficLight_conf, содержит четыре подпрограммы: конфпгу рации источников сброса, конфигурации таймеров, конфигурации ввода/вывода и конфигурации прерываний.
4.1. Система управления светофорами на пешеходном переходе Рис. 4.2. Систем;! управления светофорами на пешеходном переходе граф схема алгоритма
Глава 4. Примеры построения измерительных и управляющих систем на базе МКSiLabs Timers |Х| TimerO Timer 11 Timer2 Timer 3 | Timer 4 i Prescaled Clock Inputs C SYSCLK : <• SYSCLK/12 Clock Source Prescaled Clock Input [Above) I C External Oscillator / 8 Timer Interrupt Timer 3 Interrupt is Enabled Configure Timer Interrupts j Timer Control S' Enable Timer Timer Initial Value (Hex) TMR3H- TMR3L | BE | E5 Timer Reload Value (Hex) TMR3RLH TMR3RLL: рг fK- SMBus Timeout Set Overflow to 25mS| overflow at Zb ms _____ ____________J TMR3CN -0xD4 TMR3RLL =OxE5; TMR3RLH -OxBE; TMR3L =0xE5; TMR3H = 0xBE; OK | Cancel | Reset Puc. 4.3. Система управления светофорами па пешеходном переходе конфигурация МК
4.1. Система управления светофорами на пешеходном переходе Исходный код для системы управления светофорами на пешеходном персхо де, сохраненный в файле Traffic Light, приведен ниже. Задача 3 0: Система управления светофорами на пешеходном переходе ;Tra f f icLight.ASM ;--------------- Глобальные/локальные переменные ---- SINCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) константы R equ Pl. 7 ; RED - красный для транспорта Y equ Pl. 6 ; YELLOW - желтый для транспорта G equ Pl. 5 ; GREEN - зеленый для транспорта rd equ Pl. 4 ; red - красный для пешеходов gr equ Pl.3 ; green - зеленый для пешеходов si equ Pl.l ; Кнопка запроса перехода 1 s2 equ P1.0 ; Кнопка запроса перехода 2 Tmr3if equ 80H ; Маска флага прерывания таймера 3 f — Сегменты — my_stack segment idata rseg my_stack ds 10h my_data SEGMENT DATA RSEG my_data TIME: DS 1; Счетчик времени my_bit SEGMENT BIT RSEG my_bit Tend: dbit 1; Флаг окончания интервала времени S: dbit 1; Флаг нажатия кнопок запроса перехода cseg at 0 D ел — . 1 1 Ujjbl ll£JtiJJblr5clril<LH org OOh ; Вектор сброса LJMP Config ORG 073h ; Вектор таймера 3 Ijmp ISR_TM3 org 0B3h ; Конец области прерываний 1 Config: mov sp,#my_stack-l ; Инициализация стека Icall Init_Device ; Вызов подпрограммы конфигурации mov Pl,#13h ; Инициализация порта rd = 1, sl,s2 - входы clr S ; Очистить флаг нажатия кнопок clr Tend ; Очистить флаг времени setb EA ; Разрешить прерывания J “ t********** Состояние GREEN *******, k**i****W***#t*1t** GREEN: clr R ; Инициализация состояния GREEN clr Y
Глава 4. Примеры построения измерительных и управляющих систем на базе МК SiLabs setb G mov TIME,#100 waitg: jnb S,$ j be Tend,YELLOW sjmp waitg Состояние YELLOW ******* ; S-Tend? хжххжжжххжхжхЖжжх YELLOW: clr G ; Инициализация СОСТОЯНИЯ YELLOW waityl: setb Y mov TIME,#50 jbe Tend,RED sjmp waityl Состояние RED ********** ; Tend? *#★★★***********: RED: clr Y ; Инициализация состояния RED waitr: setb R clr rd setb gr mov TIME,#200 clr S ; Очистить флаг нажатия кнопок YELRED: jbe Tend,YELRED sjmp waitr State YELRED *********** setb Y ; Tend? ***tx*xx*i**t ; Инициализация состояния YELRED waity2: clr gr setb rd mov TIME,#50 jbe Tend,GREEN ; Tend? sjmp waity2 — Подпрограммы обработки прерываний ISR_TM3: anl tmr3cn,#not(Tmr3if) ; Очистить флаг прерывания таймера 3 mov c,sl ; S = si V s2 orl c, s2 mov S,c djnz TIME,skip TIME =0? setb Tend Установить Tend skip: reti END В разделе «Константы» присвоены символические имена выводам порта Р1 МК, а также присвоено значение для маски сброса флага прерывания таймера 3, поскольку регистр управления этого таймера не является бит-адресуемым. В раз- деле «Сегменты» определен переместимый сегмент DATA, в котором зарезерви- рован 1 байт для переменной отсчета времени TIME, и переместимый сегмент BIT, в котором определены флаги Tend и S. В разделе «Векторы прерываний» в до- полнение к традиционному вектору сброса определен вектор прерывания тайме- ра 3 в соответствии с Табл. 1.4. В разделе «Код инициализации» добавлены коман ды инициализации порта Р1 и флагов, а также команда глобального разрешения прерывания. Код, приведенный в разделах •Гианиян программа» и «Подпрограм
4.2. Система управления электрическим бойлером мы обработки прерываний», построен согласно граф-схеме Рис. 4.2 и снабжен подробными комментариями. Для проверки состояний флагов и перехода с одно временным сбросом флага использована специальная команда jbc bit,rel (см. Табл. 1.2). 4.2. Система управления электрическим бойлером Задача 31. Разработать программное обеспечение для системы управления электрическим бойлером (Рис. 4.4,а). Задача системы — включение бойлера па программируемое время от 5 до 60 минут с шагом 5 минут. По окончании занро! раммированного времени нагрева система должна отключить нагрев и подать звуковой сигнал частотой 500 Гц в течение 5 с. Управление работой системы, в том числе программирование временного интервала нагрева, должно осущссг вляться с помощью единственной кнопки. Для индикации внутренних состоянии система снабжена световым индикатором — светодиодом. Итак, система содержит объект управления — электрический бойлер с натре вателем HEATER, подключаемым к сети переменного тока через реле К1. Реле управляется с выхода М К CONTROL через усилитель на транзисторе Q1 с защит ным диодом D2. Пульт оператора содержит кнопку S1, формирующую сигнал на входе SWITCH МК, а также светодиод D1 и громкоговоритель LSI, управляемые, соответственно, с выходов LED и SPEAKER МК. Конечно-автоматную модель проектируемой системы можно построить так, как это показано на Рис. 4.4,6. Система имеет 4 состояния: OFF — выключено (начальное состояние), ON — включено, SOUND — звуковой сигнал и PROG программирование. Для управления системой с помощью единственной кнопки можно воспользоваться методом расширения аппаратных ресурсов клавиатуры (см. п. 3.7 на стр. 223): можно различать короткое нажатие на кнопку — Click и длительное — Press. Если система находится в состоянии OFF, то нагреватель вы- ключен, светодиод мигает с частотой 1 Гц, громкоговоритель выключен (см. зна- чения выходных сигналов на выносках). При коротком нажатии на кнопку Click система на короткое время (0.5 с) переходит в состояние PROG, после чего воз вращается в состояние OFF (флаг Tend — конец времени). В состоянии PROG увеличивается на 1 программируемое число N, светодиод выключен, громкогово ритель воспроизводит звуковой сигнал (в течение 0.5 с). Длительное нажатие на кнопку Press в состоянии OFF переводит систему в состояние ON, в котором на греватель включен, а светодиод постоянно горит. В этом состоянии производигся отсчет запрограммированного интервала нагрева HTI (Heat Time Interval) = N-5 минут. Выход из этого состояния возможен в двух случаях: если оператор захочет вручную прервать нагрев и выполнит длительное нажатие на кнопку Press (систс ма возвращается в состояние OFF) или по истечении запрограммированною ип тервала Tend (II И). В последнем случае система переходит в состояние SOUND па 5 секунд, после чего ио тришастся в исходное состояние OFT. В состоянии
Глава 4. Примеры построения измерительных и управляющих систем на базе МК SiLabs Рис. 4.4. Система управления электрическим бойлером: а) схема системы; б) конечно-автоматная модель. SOUND нагреватель выключен, светодиод не горит, звучит звуковой сигнал окончания нагрева. Таким образом, логика модели позволяет убедиться, что сис- тема выполняет все заданные функции. Структура данных, соответствующая «адачс управления электрическим бонде ром, приведена на Рис. 4.5,а. Переменная NUMBR нрецпа шачепа для подавле
4.2. Система управления электрическим бойлером REGISTERS NUMBR 1 1 DATA N 1 1 T05SEC 1 1 TIMEL 1 1 ИМЕН 1 1 BIT Click □ Press □ Tend □ а) ( Start ) Инициализа- ция Состояние ON б) Гш. 4.5. < поема управления электрическим бойлером: a) сiрукура данных; (>) i рв|>-схема главной программы
Глава 4. Примеры построения измерительных и управляющих систем на базе МК SiLabs ния дребезга контактов и расширения ресурса кнопки, ее лучше всего разместить к одном из регистров активного банка. В сегменте DATA потребуются перемен- ные: N — программируемое число, T05SEC — переменная для отсчета минималь- ного отрезка времени 0.5 секунды и двухбайтная переменная TIME (T1MEH:TIMEL) для отсчета времени. В сегменте BIT необходимо разместить флаги: Click, Press и Tend. Формально построенная в соответствии с моделью, граф-схема главного алго- ритма управления электрическим бойлером приведена на Рис. 4.5,6. Начальные шачения переменной TIME заданы в относительных единицах (количество мини- мальных интервалов 0.5 с). В блоке состояния ON значение этой переменной соот- ветствует программируемому интервалу времени нагрева HTI: TIME = N-5-120. Уп- равление миганием светодиода обеспечивается внутри тела цикла состояния OFF с помощью оператора задержки на время полупериода 0.5 с и оператора инвертиро- вания выхода LED. Совершенно аналогично производится генерирование звуко- вой частоты в блоках состояний SOUND и PROG (оператор задержки 1 мс и опе- ратор инвертирования выхода SPEAKER). Граф-схема процедуры обработки прерывания таймера 3 TM3_ISR приведена па Рис. 4.6. Алгоритм подавления дребезга контактов и вычисления состояния флагов Click и Press полностью соответствует методу, применяемому для подавле- Время переполнения таймера 3 = 50 мс Рис. 4.6. Система управления электрическим бойлером: раф-схема подпрограммы обработки прерывания таймера 3.
4.2. Система управления электрическим бойлером ния дребезга контактов и расширения аппаратных ресурсов клавиатуры (см. п. 3.7 на стр. 223). Служба времени активируется только при условии, что TIME * 0 и мо- мент времени прерывания кратен 0.5 с. Только в этом случае производится декрс мент переменной TIME и установка флага Tend, если TIME = 0. Конфигуриование МК для данной задачи включает запрет сторожевого тай- мера (см. описание к задаче 1), а также конфигуриование таймеров и портов вво- да/вывода. Для этого с помощью мастера конфигурации (Configuration Wizard 2) можно открыть окно Timers и на вкладке Timer 3 нажать кнопку конфигурации прерываний (Configure Timer Interrupts), что вызывает открытие окна конфигура- ции прерываний Interrupts. Там надо установить флажок разрешения прерываний Enable Timer 3 Interrupt и нажать кнопку ОК, что возвращает процесс к продолже нию конфигурирования Timer 3. Далее надо установить флажок разрешения тай мера Enable Timer и ввести начальное (Timer Initial Value) и перезагружаемое (Timer Reload Value) значения для данного таймера, рассчитанные с учетом часто ты SYSCLK = 2 МГц, коэффициента предделения SYSCLK/12 и времени перс полнения 50 мс: Timer Reload Value = 65536 - 50000-2/12 ~ 57203 = DF73H. Для реализации задержек можно использовать таймер 0. Для конфигурирона ния этого таймера необходимо выбрать опцию режима 1 — 16 Bit Counter/Timer — на вкладке таймера 0 и разрешить его прерывания. Вид окна Timers после конфи гурирования показан на Рис. 4.7. Нажатие кнопки ОК в этом окне завершает кон- фигурирование таймеров. Затем нужно открыть окно Port I/O, выбрать для иыво дов портов Pl.4, Р1.5 и Р1.6 режим Push-Pull и установить флажок Enable Crossbar (см. Рис. 4.7). Нажатие кнопки ОК в этом окне завершает конфигурирование МК. После этого код конфигурации, сохраненный в файле WaterBoiler_conf, со- держит четыре подпрограммы: конфигурации источников сброса, конфигурации таймеров, конфигурации ввода/вывода и конфигурации прерываний. Исходный код для системы управления электрическим бойлером, сохранен- ный в файле WaterBoiler, приведен ниже. Задача 31: Система управления электрическим бойлером ;WaterBoiler.ASM .--------------- Глобальные/локальные переменные ---- SINCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) .------------------------ Константы ----------------- SWITCH EQU Pl. 7 ; Вход кнопки LED EQU Pl. 6 ; Выход светодиода SPEAKER EQU Pl. 5 ; Выход громкоговорителя CONTROL EQU Pl. 4 ; Выход управления нагревателем NUMBR EQU R6 ; Переменная для погашения дребезга Tmr3if equ 80H ; Маска флага прерывания таймера 3 t ....... СЧТМиНТЫ - , my_etack segment 4ll.1t n
Глава 4 Примеры построения измерительных и управляющих систем на базе МК SiLabs Timers TimerOl Timer 1 Timer2 Prescaleci Clock Inputs Г SYSCLK Л SYSCLK/12 Clock Source ’♦ Piescaled Clock Input (Above) External Oscillator/8 Timer 3 | Timer 4 | Timer Interrupt T imer 3 Inleirupt is Enabled Configure Timer interrupts I T imer Control P Enable Timer Timer Initial Value (Hex] TMR3H TMR3L. ГЫ рт Timer Reload Value (Hex) TMR3RLH TMR3RLL pF~ p3~ SMBus Timeout ove,fc’aS Ovate" 10 25ms| TMOD -0x01; TMR3CN =0x04, TMR3RLL -0x73; TMR3RLH -OxDF TMR3L =0x73; TMR3H -OxDF; Cancel | Reset J’uc. 4.7. Система управления uicKrpiriecKiiM бойлером: конфигурация МК.
4.2. Система управления электрическим бойлером rseg ds my_stack lOh my_data N: T05SEC: TIMEL: TIMEH: my_bit Click: Press: Tend: SEGMENT DATA RSEG my_data DS 1 ; Программируемое число DS 1 ; Переменная отсчета 0.5 с DS 1 ; Младший байт отсчета времени DS 1 ; Старший байт отсчета времени SEGMENT BIT RSEG my_bit DBIT 1 ; Флаг короткого нажатия DBIT 1 ; Флаг длительного нажатия DBIT 1 ; Флаг окончания отсчета времени cseg at 0 r org LJMP org Ijmp org Ijmp org OOh ; Вектор сброса Config OOObh ; Вектор таймера 0 TMR0_ISR 0073h ; Вектор таймера 3 TMR3_ISR 0B3h ; Конец области прерываний / Config: mov Icall clr clr clr mov mov mov mov setb sp,#my_stack-l ; Инициализация стека Init_Device ; Вызов подпрограммы конфигурации Click ; Очистка флагов входных сигналов Press Tend N,#l ; N = 1 TIMEL,#0 ; TIME = 0 TIMEH,#0 T05SEC,#10 ; Начальное значение = 10 EA ; Разрешить прерывания I t kk-k-kkkkkkkk'k-k-kkk OFF: clr clr clr 0FF_L: call cpl jbc jbc sjmp । kkkiekkkkkkkkkkk'k ON: setb setb mov mov mul Состояние OFF ************************** CONTROL ; Инициализация состояния OFF LED SPEAKER Delay05s ; Задержка 0.5 c LED ; Инвертировать LED Click,PROG ; Click? Press,ON ; Press? OFF_L Состояние ON **************************** CONTROL ; Инициализация состояния ON LED a,N ; TIME = N*5*120 b,«5 ab
Глава 4. Примеры построения измерительных и управляющих систем на базе МК SiLabs mov mul mov mov mov b,#120 ab TIMER,b TIMEL,a T05SEC,#10 ON_L: jbc Tend,SOUND ; Tend? jbc Press,OFF ; Press? sjmp ON_L .**************** t Состояние SOUND *************************** SOUND: clr CONTROL ; Инициализация состояния SOUND clr LED , mov TIMER,#0 / mov TIMEL,#5*2/' mov T05SEC,#l/ SOUND_L: call Delaylms ; Задержка 1 мс cpl SPEAKER ; Инвертировать SPEAKER jbc Tend,OFF ; Tend? sjmp SOUND_L .********** ****** Состояние PROG **************************** PROG: inc N ; Инициализация состояния PROG clr LED mov TIMER,#0 mov TIMEL,#1 mov T05SEC,#10 PROG_L: call Delaylms ; Задержка 1 мс cpl SPEAKER ; Инвертировать SPEAKER jbc Tend,OFF ; Tend? sjmp PROG_L Подпрограммы Delaylms: mov mov setb lb ret thO,# high tlO,# low trO tr0,$ ; Задержка 1 мс (-1000/6); 1000 мкс (-1000/6) ; Запустить таймер ; Ждать прерывания 0 Delay05s: ; Задержка 0.5 с mov r7,#5 ; 0.5с = 5*100мс Del_L: mov thO,# high( -50000/3) ; 100 мс mov tlO,# low ( -50000/3) setb trO ; Запустить таймер 0 jb tr0,$ ; Ждать прерывания djnz r7,Del_L ret ;------------- Подпрограммы обработки прерываний --------------- TMR0_ISR: clr trO ; Стоп таймера О reti TMR3_ISR: anl TMR3CN,#not(Tmr3if) ; Очистить флаг таймера 3
4.2. Система управления электрическим бойлером push acc ; Сохранить ACC jb SWITCH,Inc_N ; SWITCH =1? mov a,NUMBR ; NUMBR =0? jz Dec_T cjne NUMBR,#2,next 2 ; NUMBR<2? next2: jc Clr_N cjne NUMBR,#10,nextlO ; NUMBRclO? nextlO: jc SClick setb Press ; Установить Press sjmp Clr_N SClick: setb Click ; Установить Click Clr_N: mov NUMBR,#0 ; NUMBR = 0 sjmp Dec_T Inc_N: inc NUMBR ; Инкремент NUMBR Dec_T: mov a,TIMEL ; TIME =0? orl a,TIMEH jz exit djnz T05SEC,exit ; 0.5 c? mov T05SEC,#10 dec TIMEL ; Декремент TIME mov a,#0FFh cjne a,TIMEL,Cmp_T dec TIMEH Cmp_T: mov a,TIMEL ; TIME =0? orl a,TIMEH jnz exit setb Tend ; Установить Tend exit: pop acc ; Восстановить ACC reti END В разделе «Константы» присвоены символические имена выводам порта Р1 МК и регистру R6, а также определено значение для маски сброса флага преры- вания таймера 3, поскольку регистр управления этого таймера не является бит- адресуемым. В разделе «Сегменты» определен переместимый сегмент DATA, в котором зарезервированы ячейки для переменных, и переместимый сегмент BIT, в котором определены флаги в соответствии со структурой данных решаемой за- дачи (см. Рис. 4.5,а). В разделе «Векторы прерываний» в дополнение к традици- онному вектору сброса определены векторы прерываний таймера 0 и таймера 3 и соответствии с Табл. 1.4. В разделе «Код инициализации» добавлены команды инициализации флагов и переменных, а также команда глобального разреше- ния прерывания. Код, приведенный в разделах «Главная программа» и «Подпро- граммы обработки прерываний», построен согласно граф-схемам (см. Рис. 4.5,6 и 4.6) и снабжен подробными комментариями. Подпрограммы задержек, приве- денные в разделе «Подпрограммы», построены с использованием прерываний таймера 0.
Глава 4. Примеры построения измерительных и управляющих систем на базе МК SiLabs 4.3. Система управления автоматическими дверями Задача 32. Разработать программное обеспечение для системы управления ав- томатическими дверями (Рис. 4.8,а). Система оснащена инфракрасным (ИК) датчиком человека. Механизм открывания дверей «винт-гайка», приводимый в действие электродвигателем постоянного тока, снабжен концевыми выключате- лями для идентификации закрытого и открытого состояния дверей. Аппаратное построение системы включает подсоединение датчиков ко вхо- дам МК (активный сигнал каждого датчика — логическая 1) и подключение вхо- дов драйвера электродвигателя (см. описание к задаче 19) к выходам МК. Имеет- ся всего 3 датчика: PRS -/ персона, CLS — закрыто и OPN - открыто. Управляю- щих сигналов тоже 3: BRAKE — тормоз, D1R — направление и PWM — скорость. Для управления электродвигателем с постоянной скоростью сигнал PWM может быть обычной булевой переменной. Граф переходов проектируемой системы можно построить так, как это пока- зано на Рис. 4.8,6. Система имеет 5 состояний: CLOSE — закрыто (начальное со- стояние), OPENING — открывание, OPEN — открыто, CLOSING — закрывание и BRAKE — торможение. В модели использованы четыре входных сигнала: Person — срабатывание датчика PRS, Close — срабатывание датчика CLS, Open — срабаты- вание датчика OPN и Tend — окончание отсчета заданного времени. После вклю- чения система находится в состоянии CLOSE: тормоз включен, сигнал управле- ния скоростью равен 0. По сигналу Person система переходит в состояние OPENING: тормоз выключается, сигнал скорости активен, направление враще- ния двигателя в сторону открывания дверей. Сигнал Open (сработал концевой выключатель открытого положения дверей) переводит систему в состояние OPEN: тормоз включен, сигнал управления скоростью равен 0, отсчитывается время 1 с. Сигнал окончания отсчета времени Tend переводит систему в состоя- ние CLOSING: торможение выключается, направление реверсируется, сигнал управления скоростью активен — двери закрываются. Если в этот момент появля- ется новый человек, сигнал Person переводит систему в состояние BRAKE: сигнал управления скоростью дезактивируется, тормоз включен, отсчитывается время 0.5 с, необходимое для остановки механизма и изменения направления движе- ния. По сигналу Tend система возвращается в состояние открывания OPENING. Если же система находится в состоянии закрывания CLOSING и никто к дверям не подходит, то это состояние завершается при поступлении сигнала Close, т. е. срабатывании концевого выключателя закрытого положения дверей. В этот мо- мент система возвращается в исходное состояние CLOSE и ожидает следующего человека. Таким образом, логика модели позволяет убедиться, что система вы полняет все заданные функции. Структура данных для задачи управления автоматическими дверями приведена па Рис. 4.9,а. Для обслуживания каждого из датчиков потребуется потри булевых переменных: вывод порта, с которою считывается состояние датчика, флаг для подавления дребезга коп тактов и фла1 состояния входа конечно-автоматной (КА)
4.3. Система управления автоматическими дверями б) Рнс. 4.Х. < не гема управления автоматическими дверями: и) схема ciicicmi*:: 6) конечно-автоматная модель.
Глава 4. Примеры построения измерительных и управляющих систем на базе МК SiLabs модели. Для отсчета заданных интервалов времени с квантом 50 мс (период опро- са датчиков — синхронизации автомата) вполне достаточно одного байта TIME и флага Tend. a) Входы КА-модели | Person] ' | Close | | Open | | Tend | j Puc. 4.9. Система управления автоматическими дверями: а) структура данных; б) граф-схема главной программы. Формально построенная в соответствии с моделью граф-схема главного алго- ритма управления автоматическими дверями приведена на Рис. 4.9,6. Никаких операций в теле цикла каждого из состояний не требуется, так как все необходи- мые установки выполняются в операторах инициализации состояний. Граф-схема процедуры обработки прерываний таймера синхронизации TMR3 ISR приведена на Рис. 4.10. Она содержит четыре блока для вычисления состояния каждого из флагов входных сигналов конечно-автоматной модели. Для каждого из датчиков структуры блоков идентичны. Каждый такой блок включае! проверку состояния входа и проверку состояния флага для подавления дребезга. Если входной сигнал неактивен, то производится очистка флага для подавления дрсбезш. Если входной сигнал активен и флаг для подавления дребезга устной леи, го значит, что активное состояние входа подтверждено дважды (с периодом
4.3. Система управления автоматическими дверт 50 мс) и надо установить флаг входного сигнала модели, после чего очистить ф ь для подавления дребезга. Если же входной сигнал активен, а флаг для подавлснп дребезга не установлен, это значит, что активное состояние входа зафиксирован в первый раз и надо установить только флаг для подавления дребезга. Блок пь числения флага Tend содержит оператор декремента переменной TIME и пронес ки результата на равенство 0. Если результат проверки положительный, то уста навливается флаг Tend. Время переполнения таймера 3 = 50 мс Рис. 4.10. Система управления автоматическими дверями: граф-схема подпрограммы обработки прерывания таймера 3. Конфигурирование МКдля данной задачи включает запрет сторожевого гай мера (см. описание к задаче 1), а также конфигурирование таймеров и портов ввода/вывода. Конфигурирование выполняется аналогично задачам 30 и 31. Пос ле этого код конфигурации, сохраненный в файле Doors conf, содержит четыре подпрограммы: конфигурации источников сброса, конфшурацни таймеров, коп фигурации ввода/ вы иода п конфшурацни прерываний.
Глава 4. Примеры построения измерительных и управляющих систем на базе МК SiLabs Исходный код для системы управления автоматическими дверями, сохранен- ный в файле Doors, приведен ниже. \ ; ^Задача 32: Система управления автоматическими дверями 1 ;Doors.ASM 1 Глобальные/локальные переменные $INCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) PRS equ PO.O Входы ПЕРСОНА CLS equ P0.1 ЗАКРЫТО OPN equ P0.2 ОТКРЫТО BRAKE equ P1.0 Выходы ТОРМОЗ DIR equ Pl.l НАПРАВЛЕНИЕ PWM equ Pl.2 ШИМ Tmr3if equ 8 OH Маска флага прерывания таймера 3 I — Сегменты - — my_stack segment idata rseg my_stack ds lOh my_data SEGMENT DATA RSEG my_data TIME: ds 1 Счетчик времени my_bit SEGMENT BIT RSEG my_bit PRF: DBIT 1 Флаги гашения дребезга CLF: DBIT 1 OPF: DBIT 1 Person: DBIT 1 Флаги состояния входов Close: DBIT 1 Open: DBIT 1 Tend: DBIT 1 cseg at 0 org OOh Вектор сброса LJMP Config org 0073h Вектор таймера 3 Ijmp TMR3_ISR org 0B3h Конец области прерываний t Config: mov sp,#my_stack-l Инициализация стека Icall Init_Device Вызов подпрограммы конфигурации clr Person Очистка флагов входов clr Close clr Open clr Tend setb EA Разрешить прерывания
4.3. Система управления автоматическими дверям ; Главная программа Start: ****** *** Состояние CLOSE ************************** CLOSE—: setb BRAKE ; Инициализация состояния CLOSE clr PWM Ch_Per: jbc Person,OPENING ; Person? sjmp Ch_Per ****** *** Состояние OPENING ************************ OPENING: clr BRAKE ; Инициализация состояния OPENING setb DIR setb PWM Ch_Op: jbc Open,OPEN_ ; Open? sjmp Ch_Op .********** ****** *** Состоящие OPEN *************************** OPEN_: setb BRAKE ; Инициализация состояния OPEN clr PWM mov TIME,#20 clr Tend Ch_T20: jbc Tend,CLOSING ; Tend? sjmp Ch_T20 ****** *** Состояние CLOSING ************************ CLOSING: clr BRAKE ; Инициализация состояния CLOSING clr DIR setb PWM Ch.PC: jbc Person,BRAKE- ; Person? jbc Close,CLOSE- ; Close? sjmp Ch_PC . ********** ****** *** Состояние BRAKE ************************** BRAKE_: setb BRAKE ; Инициализация состояния BRAKE clr PWM mov TIME,#10 clr Tend Ch_TlO: jbc Tend,OPENING ; Tend? sjmp Ch_TIO TMR3_ISR: anl TMR3CN,#not(Tmr3if) ; Сброс флага прерывания таймера 3 .********** r ****** * * * * Вычислить person*************************** jnb PRS,C1_PRF ; PRS =1? jb PRF,St-Per ; PRF =1? setb PRF ; Установить PRF sjmp C_Close St_Per: setb Person ; Установить Person C1_PRF: clr PRF ; Очистить PRF • ********** ****** * * * * * вычислить close*************************** C_Close: jnb CLS,C1_CLF ; CLS =1? jb CLF,St_Cls ; CLF =1? setb CLF ; Установить CLF •jmp C_0pen
Глава 4. Примеры построения измерительных и управляющих систем на базе МК SiLabs St_Cls: C1_CLF: setb clr Close CLF ; Установить Close ; Очистить CLF V k ****** * ““Вычислить Open1 !************************ (\_0pen: jnb OPN,C1_OPF ; OPN = 1? jb OPF,St_Opn ; OPF = 1? setb OPF ; Установить OPF sjmp C_Tend St_Opn: setb Open ; Установить Open C1_OPF: clr OPF ; Очистить OPF .********i k ****** * ““Вычислить Tend1 !************************ C_Tend: djnz TIME,return ; DJNZ TIME setb Tend ; Установить Tend return: reti END В разделе «Константы» присвоены символические имена выводам портов РО и Р1 МК и присвоено значение для маски сброса флага прерывания таймера 3. В разделе «Сегменты» определен переместимый сегмент DATA, в котором зарезер- вирован 1 байт для переменной TIME, и переместимый сегмент BIT, в котором определены флаги в соответствии со структурой данных решаемой задачи (см. Рис. 4.9,а). В разделе «Векторы прерываний» в дополнение к традиционному век- тору сброса определен вектор прерываний таймера 3 в соответствии с Табл. 1.4. В разделе «Код инициализации» добавлены команды инициализации флагов вход- ных сигналов конечно-автоматной модели, а также команда глобального разре- шения прерывания. Код, приведенный в разделах «Главная программа» и «Под- программы обработки прерываний», построен согласно граф-схемам (см. Рис. 4.9,6 и 4.10) и снабжен подробными комментариями. Заключительный пример представляет собой в сущности комплексный про- ект, демонстрирующий возможности технологии «Система на кристалле», когда две сложные функции — АЦП и драйвера ЖКИ — реализованы за счет ресурсов МК, а из внешних компонентов используются только пассивные элементы. 4.4. Цифровой вольтметр Задача 33. Разработать цифровой вольтметр, позволяющий измерять посто- янное напряжение в диапазоне 0...99.9 В с автоматическим выбором шкалы изме- рений и отображением результата на 3-местном 7-сегментном жидкокристалли- ческом индикаторе. Благодаря широким техническим возможностям МК фирмы Silicon Laboratories возможно решение этой задачи на базе только одного МК, без при- менения других активных элементов. Схема одного из возможных вариантов цифрового вольтметра приведена на Рис. 4.И,а. Отображение результата измерения upon июли гея па 3-местном 7-сегментном зпакосинтезирующем ЖКИ, схема которою приведена па Рис. 4.11,6. Индикатор
4.4. Цифровой вольтметр а) SEG1 SEG2 SEG3 SEG4 SEG5 SEG6 SEG7 SEG8 SEG9 С0М1 f1 а1 Ы f2 a2 b2 f3 a3 ЬЗ COM2 — gi hi — g2 h2 — дз h3 COM3 е1 d1 _£1 e2 d2 c2 e3 d3 сЗ б) /’«<•. 4.11. I (ифроноП нольтмстр: а) электрическая схема; ft) схема жилкокрисгаллическою инднкаго i.
Глава 4. Примеры построения измерительных и управляющих систем на базе МК SiLabs содержит три знакоместа, обозначенные цифрами 1, 2, 3. Каждое знакоместо представляет собой 7 основных сегментов, обозначенных латинскими буквами а. Ь, с, d, е, f, g, и сегмент десятичной точки (запятой) h. Для сокращения количест- ва выводов индикатора сегменты мультиплексированы, т. е. объединены в матри- цу, показанную на том же рисунке. Такой индикатор имеет коэффициент мульти- плексирования 3. Всего индикатор имеет 3 общих вывода СОМ (строки матри- цы) и 9 сегментных выводов SEG (столбцы матрицы). При управлении мультиплексированным индикатором необходимо синхрон- но формировать возбуждающие сигналы столбцов и строк. При этом в матрице будут присутствовать выбранные сегменты (которым соответствуют активные сигналы строки и столбца), полувыбранные (которым соответствует только один активный сигнал — либо строки, либо столбца) и невыбранные. Выбранные сег- менты должны высвечиваться, а полувыбранные и невыбранные должны быть погашены. Для жидкокристаллического элемента существует определенный по- рог размаха амплитуды напряжения возбуждения, после которого он переходит в состояние свечения. Этот порог составляет 1.6...1.7 В. Напряжение питания МК V составляет 3 В. Поэтому необходимо, чтобы амплитуда сигнала возбуждения на полувыбранных сегментах не превышала V/3. Временные диаграммы сигналов управления ЖКИ, схема которого изображена на Рис. 4.11,6, показаны на Рис. 4.12. Полный кадр возбуждения состоит из первого и второго полукадров. Допус- тимая частота кадров для большинства ЖКИ лежит в пределах от 30 до 1000 Гц. Возбуждающие напряжения формируются в четырех уровнях: 0, V/3, 2V/3, V. В первом полукадре сегментные сигналы SEG имеют активный высокий уровень и изменяются между уровнями V/3 и V. а сигналы строк СОМ имеют низкий актив- ный уровень и изменяются между уровнями 0 и 2V/3. Во втором полукадре все наоборот. В результате на каждом сегменте ЖКИ формируются сигналы с разма- хом амплитуды Удля выбранных элементов и с размахом V/3 — для полувыбран ных и невыбранных элементов. Формирование четырехуровневых потенциалов в схеме Рис. 4.11,а обеспечи вается резистивными делителями R-2R, причем плечо R (все четные резисторы от R4 до R26) подключается к выводу порта МК, формирующего соответствую- щий логический КМОП-потенциал (логический 0 — 0 В, логическая 1 — V В). Плечо 2R (все нечетные резисторы от R5 до R27) подключается к общей цепи (о I дельно для сигналов SEG и СОМ), также управляемой с выхода МК. Нетрудно установить, что при потенциале логического 0 на общей цепи с выхода делителя можно снимать уровни 2V/3 и 0, а при потенциале логической 1 — уровни V н V/3. Иными словами, изменяя потенциалы общих цепей в каждом полукадре, можно обеспечить формирование временных диаграмм в соответствии с Рис. 4.12. Следовательно, для управления ЖКИ прямо от МК никаких дополни тельных аппаратных средств, кроме резисторов, не требуется. Все управление ЖКИ в этом случае обеспечивается программно. Необходимо отметить, что выбранный индикатор (см. Рис. 4.11,6) имеет во i можность отображения десятичной точки для заданного диапазона в позиции I или в пошипи 2, чго соответствует масштабному коэффициенту 10. Позиция 3
4.4. Цифровой вольтметр ____________Полный кадр возбуждения____________ Первый полукадр | Второй полукадр Номер выбранной строки 1 | 2 | 3 | 1 | 2 | ~3 десятичной точки может использоваться для индикации ошибки в случае нревы шения входным напряжением пределов допустимого диапазона. Выбор оптимальной с точки зрения точности измерения, шкалы для входного сигнала заключается в регулировании коэффициента усиления программируемо го усилителя внутреннего 12-битного АЦП МК таким образом, чтобы измеряемое напряжение, если это возможно, лежало в верхней половине цифрового диапа ю на АЦП. В данной задаче, с учетом возможностей индикатора, целесообразно вы брать для использования значения коэффициента усиления 1, 2, 4, 8 и 16 (см. и. 1.10.1 на стр. 97). В качестве источника опорного напряжения АЦП следует вы брать внутренний источник номиналом 2.4 В. С учетом этих соображений можно рассчитать требуемый коэффициент деления входною резистивною делителя Напряжение L) па входе АЦП будет равно
Глава 4. Примеры построения измерительных и управляющих систем на базе МК SiLabs U = k-g-V, (4.1) где к — коэффициент деления резистивного делителя, g — коэффициент усиления программируемого усилителя, V — измеряемое напряжение. С другой стороны, это напряжение равно Ь = VRef-N/212 , (4.2) где VREF — опорное напряжение АЦП, N — числовой результат преобразования. Подставив максимальные значения V= 100 В, N = 212 и соответственно мини- мальное значение g= 1, из (4.1) и (4.2) можно получить к = 2.4/100 = 0.024. (4.3) Таким образом, если выбрать входное сопротивление вольтметра на уровне 100 кОм, входной делитель будет иметь номиналы резисторов, указанные на Рис. 4.11,а. Для точной калибровки прибора и возможности использования ре- зисторов с большим разбросом сопротивлений в схеме делителя предусмотрен подстроечный резистор. Кроме того, для использования внутреннего источника опорного напряжения необходимо замкнуть выводы МК VREF и VREFn и подклю- чить конденсаторы фильтра (см. Рис. 1.64), что на Рис. 4.11,а не показано. Из вышеприведенного расчета следует еше один вывод, очень важный для разработки алгоритмов обработки результатов измерений. В самом деле, подста- вив теперь в формулы (4.1) и (4.2) принятое значение к, можно получить 2.4-N/212 = (2.4/100)V или N/2,2= V/100. (4.4) Из формулы (4.4) следует, что при g = 1 (минимальное усиление — максималь- ное измеряемое напряжение) и заданном диапазоне напряжения результат преоб- разования — число N — является двоичной дробью. Конечно-автоматная модель проектируемого устройства приведена на Рис. 4.13,а. После включения питания система находится в состоянии измерения MEASURE. В этом состоянии с целью фильтрации входных шумов и повышения точности измерений производится многократное преобразование входного на- пряжения в код, регулирование коэффициента усиления усилителя (если требует ся) и вычисление результата с учетом коэффициента усиления. Затем система пе- реходит в состояние преобразования CONVERSION. В этом состоянии получен пая 16-битная двоичная дробь преобразуется в четырехразрядную десятичную, выбираются три значащие цифры для отображения (т. е. положение десятичной точки с учетом умножения на 100), производится преобразование в 7-сегментпый код и формирование кодов для управления индикацией. После завершения пре образований система переходит в состояние DISPLAY, где обеспечивается отоб ражение информации на ЖКИ. По истечении интервала времени 1 с по флагу l_sec система возвращается в состояние MEASURE и цикл повторяется. Структурная схема регулирования коэффициента усиления показана па Рис. 4.13,6. Входное напряжение V усиливается усилителем с программируемым
4.4. Цифровой вольтметр MEASURE CONVERSION DSPLAY a) а) конечно uni ома шан модель; 6) схема регулирования ко хрфннисша усиления.
Глава 4. Примеры построения измерительных и управляющих систем на базе МК SiLabs коэффициентом усиления PGA и поступает на вход преобразователя ADC, выход- ной код которого N обрабатывается оконным детектором WD, формирующим флаг оконного детектора AD0W1NT. С учетом результата преобразования N и состояния флага AD0WINT процессор 8051 вычисляет требуемый коэффициент усиления G. Поскольку возможные значения коэффициента усиления G представляют собой степени числа 2, оптимальное с точки зрения точности измерения напряжение на входе преобразователя U должно составлять 0.5VREF < U < VREF. Однако с учетом помех входного сигнала пороги оконного детектора следует выбрать на уровне 45 и 95%, как это показано на Рис. 4.13,6. Если результат пре- образования более 95%, то следует уменьшить коэффициент усиления (G>1), если он менее 45%, то надо увеличить коэффициент усиления (GT). Если результат на- ходится в заданных границах, коэффициент усиления оптимальный (G = ОК). Из рисунка видно, что факт необходимости изменения коэффициента усиления фик- сируется флагом оконного детектора AD0WINT, а направление его изменения можно оценить путем сравнения полученного результата преобразования с неко- торым средним значением, например, с уровнем 75%. Все эти соображения явля- ются основой для построения алгоритма регулирования коэффициента усиления. Структура данных для цифрового вольтметра может быть представлена в виде, показанном на Рис. 4.14. Наиболее важные компоненты данных, такие, как указа тели и счетчики циклов для сокращения программного кода и времени исполнс пия, следует разместить непосредственно в регистрах рабочего банка. Два универ сальных указателя данных — pnt 1 и pnt2 — необходимо разместить в регистрах R0 и R1, счетчик полукадров cnt hf, счетчик строк cnt_r, счетчик цифр cnt d, счетчик битов cnt_b и счетчик цикла loop ent можно разместить в регистрах R2, R3, R4, R5 и R6, а регистр R7 зарезервировать для хранения кода управления коэффициеп том усиления gain (равен двоичному логарифму коэффициента усиления). В сегменте DATA внутренней памяти данных необходимо разместить два бу- фера трехбайтных двоичных чисел BINA и BINB для вычисления суммы 256 выборок и точных преобразований трехбайтные буферы 7-сегментных кодон BUF_7S и шестибайтный буфер портов BUF_P, а также двухбайтный счетчик врс мени TIMEFETIMEL. В сегменте IDATA нужно разместить четырехбайтный бу фер для неупакованного двоично-десятичного числа BUF_BCD. И наконец, в сегменте BIT потребуются флаги: Error — флаг ошибки (входное напряжение вольтметра более 100 В), Point — флаг десятичной точки (точка находится на пер вом знакоместе) и l_sec — флаг окончания отсчета времени индикации. Граф-схема главного алгоритма цифрового вольтметра приведена нп Рис. 4.15,а. Алгоритм имеет структуру бесконечного цикла с оператором глобаль ной инициализации (1). В тело цикла включена цепочка операторов состоянии (2, 3, 4), а на выходе из цикла проверяется состояние флага l_sec, что полное п.и> соответствует конечно-автоматной модели Рис. 4.13,а. Разработанный для состояния MEASURE алгоритм отображен на граф-ехг мс Рис. 4.15,6. Сразу после оператора инициализации состояния (Ml) начип.кчеи цикл измерений, включающим запуск АЦП (М2), ожидание готовности резулыв га преобразования (М3), сложение полученного отсчета с суммой отсчетов (M il п проверку условия завершения цикла (М5). После завершения цикла из 256 пзм'
4.4. Цифровой вольтметр Рис. 4.14. Цифровой вольтметр: структура данных. рений проверяется состояние флага оконного детектора ADOWINT (Мб). Если этот флаг не установлен, то это означает, что все выборки находятся в «окне» (см. Рис. 4.13,6). В этом случае нет необходимости регулировать коэффициент усиле цня, поэтому результат усредняется и делится на коэффициент усиления G (М7). после чего алгоритм завершается. Если же флаг оконного компаратора ADOWIN 1 установлен, то это свидетельствует о необходимости регулирования коэффицисн га усиления (М8). Для этого прежде всего надо определить направление измене пня коэффициента усиления (N > 0.75), а затем проверить граничные значения Гели необходимо увеличить коэффициент, а он имеет предельное значение ((1 = 16), то пет по можности его увеличить, однако результат можно вычислить. Если значение не предельное, нужно инкрементировать код управления коэффи цнентом усиления gain Если необходимо уменьшить коэффициент, то для этою следует декреме!пирона 1ь кол управления коэффициентом усиления gain. Сдс лап. это можно юлько при условии, что коэффициент не равен минимальному
Глава 4. Примеры построения измерительных и управляющих систем на базе МК SiLabs б) Рис. 4.15. Цифровой волы мор: а) граф-схема главной про раммы; б) граф схема алгоритма для состояния MEASURE.
4.4. Цифровой вольтмец (G * 1). В противном случае результат выходит за допустимые пределы измерения необходимо обнулить недостоверный результат, установить флаг ошибки Erroi (М10) и завершить состояние MEASURE. Если в блоке регулирования коэффици ента усиления было выполнено изменение переменной gain, то следует измени и коэффициент усиления преобразователя и выполнить небольшую задержку для за вершения переходных процессов (М9), после чего повторить цикл измерения. Разработанный для состояния CONVERSION алгоритм показан на граф-схс- ме Рис. 4.16. Сразу после оператора инициализации состояния (С1) начинается цикл преобразования двоичной дроби результата измерения в десятичную, вклю чающий операторы умножения двоичной дроби на 10 (С2), отделение и сохранс ние целой части произведения, как цифры в коде “Unpacked BCD” (СЗ) и про верку на 4-кратное повторение (С4). Получаемые коды четырех цифр сохраняюi ся в буфере BCD. Далее необходимо выбрать три цифры для индикации. Сначала выбираются старшие три цифры путем установки указателя на начало буфера (С5). Однако если первая цифра равна 0 (С6), то она отбрасывается путем инкрс мента указателя и установки флага Point (С7), свидетельствующего о необходн мости изменения позиции десятичной точки. После этого производится преобра зование трех цифр в 7-сегментный код (С8) и установка десятичной точки (С9): если Error = 1, то точка устанавливается на крайнее правое знакоместо 113 (в соче- тании с нулевым результатом это будет свидетельствовать о выходе измеряемого напряжения за границы диапазона), если Error = 0, но Point = 1, то точка устапав ливается в крайней левой позиции hl, в противном случае — после второй десяти чной цифры h2. Последним блоком состояния CONVERSION является форми- рование трех слов для управления индикацией (СЮ) — каждое слово предназна- чено для управления определенной строкой ЖКИ. Таблица 7-сегментных кодов, в которой выбран порядок расположения cci - ментов в соответствии со схемой индикатора (см. Рис. 4.11,6), приведена па Рис. 4.17,а. А на Рис. 4.17,6 приведена схема преобразования данных, выполняв мая в операторе С8 и блоке СЮ (см. Рис. 4.16). Если первое преобразование миля ется элементарным и выполняется с помощью алгоритма просмотра таблиц, го блок СЮ является нетривиальным. Нетрудно заметить, что структура слов управ ления индикацией определяется схемой подключения ЖКИ и схемой самого ЖКИ (см. Рис. 4.11,6). Разработанный для блока СЮ алгоритм под именем WORDS приведен пл Рис. 4.18 с комментариями. Цикл формирования трех слов управления ипдика цией содержит вложенный цикл формирования слова. Формирование слона уп равления индикацией включает вложенный цикл списывания по 3 бита и з каждо го 7-сегментного кода. Такое списывание реализуется путем последовательного сдвига 7-сегментных кодов влево. Выдвинутый бит передается в слово через фла! переноса. Исключение составляет слово 2 строки, где старший 3-й бит нс опреде лен (см. Рис. 4.17,6), т. е. может иметь любое значение. Оператор W5 делает л<> значение равным 0. Граф-схем i алгоритма для состояния DISPLAY приведена на Рис. 4.19,а. Этот алгоритм прслусмагрпнасг инициализацию процесса, обслуживаемого нрерына ниями таймера 0 Дня ттого необходимо установить время индикации и очистить
Глава 4. Примеры построения измерительных и управляющих систем на базе MKSiLabs Инициализация С8 Преобразовать в 7-сегментный код гС2----- ------ Умножить двоичную дробь на 10 г-СЗ Отделить и сохранить целую часть как цифру BCD Установить указатель на начало буфера BCD Инкремент указателя, Установить флаг Point Рш. 4.16. Цифровой вольтметр: граф-схсма алгоритма для состояния CONVERSION.
4.4. Цифровой вольтметр Цифра Код BCD 7-сегментный код f а ь g h е d с 0 0 0 0 0 1 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 0 0 0 0 1 2 0 0 1 0 0 1 1 1 0 1 1 0 3 0 0 1 1 0 1 1 1 0 0 1 1 4 0 1 0 0 1 0 1 1 0 0 0 1 5 0 1 0 1 1 1 0 1 0 0 1 1 6 0 1 1 0 1 1 0 1 0 1 1 1 7 0 1 1 1 0 1 1 0 0 0 0 1 8 1 0 0 0 1 1 1 1 0 1 1 1 9 1 0 0 1 1 1 1 1 0 0 1 1 а) I ОI ОI О I О I 1 цифра | | О | О | 0 | О | 2 цифра"| | О | О | О | О | 3 цифра | Неупакованный BCD формат (Unpacked BCD) | ft | а1 | bl|g1 | М | e11 d1~[~c1~] | f2 | a2 | b2 | g21 Л21 e21 d2~[c2~~| | f3 | a3 | b31 g31 h31 e3|d3 |c3 | 7-сегменгные коды |0|Q|l|0|l|0|l|-t<-------------|gll hl| - |g2|h2| - |g3| h3| Слово 2 строки I о I о I 1 |o I 1 I 1 l° l61^-| di | cl | e21 d21 c21 e31 d31 сЗ | Слово 3 строки Буфер портов: Слова для управления индикацией б) /’иг 4./’ Цифровой вольтметр: a; laoaiina 7-cci минных колов; 6) схема преобразования данных.
Глава 4. Примеры построения измерительных и управляющих систем на базе МК SiLabs ( WORDS ) ———1—W1 Инициализи- ровать цикл формирования ----► -----1—W2 Инициализи- ровать цикл для слова W ।. 1. Установить счетчик строк = 3 W1.2. Установить указатель буфера портов W1.3. Инициализировать биты общих выводов W2.1. Установить счетчик цифр = 3 W2.2. Установить указатель буфера 7-сегментного кода I W6 Сдвинуть 7-сегм.код влево ----—W5 Очистить перенос слово влево через перенос Инкремент указателя 7-сегм. кода Инкремент указателя буфера портов Рис. 4.18. Цифровой вольтметр: граф-схема блока WORDS
4.4. Цифровой вольтметр флаг l_sec (D1), установить начальные значения счетчиков полукадров и строк (D2. D3), установить указатель буфера портов (D4), запустить таймер 0 и разрс шить его прерывания (D5, D6). Все операции по обслуживанию кадра возбуждения ЖКИ (см. Рис. 4.12) вы полняются в подпрограмме обработки прерываний TMR0_ISR, граф-схема кото- рой приведена на Рис. 4.19,6. Флаг запроса прерывания этого таймера сбрасыва- ется автоматически, поэтому первый оператор (Т1) выводит очередное слово в порты Р1 и Р2, инвертирует это слово и инкрементирует указатель, подготавливая а) Вывести слово в порты, Инверти ровать слово, Инкрементировать указатель портов Да Да - T4 — -------- Установить счетчик полукадров = 2 г Т5 -*----- Установить счетчик строк = 3 ГТ6 Установить указатель буфера портов Время закончилось? Все строки? Все п/кадры? DJNZTMEL9 DJNZTMEH? T8 Остановить таймер, Запретить прерывания Да гт9 J— Установить флаг 1_sec б) Рис. 4.19. Цифровой волюметр к) |рлф схема алгоритма для состояния DISPLAY; б) ip.i<|> схема iiojiiipoipiiMMN обработки прерываний от таймера О
лава 4. Примеры построения измерительных и управляющих систем на базе МК SiLabs следующую фазу полукадра. Завершение полукадра оценивается по количеству строк (Т2). Если полукадр завершен, то проверяется, завершен ли кадр (ТЗ). Если это так, производится реинициализация счетчика полукадров (Т4). В любом слу- чае по завершении любого полукадра производится реинициализация счетчика строк (Т5) и указателя портов (Тб). В завершающей части алгоритма производят- ся декремент и проверка на 0 счетчика времени TIMEH:TIMEL (Т7). И если ре- зультат проверки положительный, то перед возвратом из подпрограммы деакти- вируется таймер (Т8) и устанавливается флаг l_sec (T9). Конфигурирование МК для данной задачи включает запрет сторожевого тай- мера (см. описание к задаче 1), а также конфигурирование аналого-цифрового преобразователя ADCO, таймера 0 и портов ввода/вывода. Для этого с помощью мастера конфигурации (Configuration Wizard 2) нужно открыть окно ADCs (Рис. 4.20) и на вкладке ADC0 установить флажок разреше- ния Enable ADCO и определить границы значений для оконного детектора (Programmable Window Detector): верхнюю (Greater Than) F333H (95%) и нижнюю (Less Than) 7333H (45%). Затем надо нажать кнопку конфигурирования источни- ка опорного напряжения (Configure Reference Control), что вызывает открытие окна конфигурации источника опорного напряжения Voltage Reference. В этом окне надо установить два флажка: разрешения внутреннего генератора смещения Enable Internal Bias Generator и разрешения буферного усилителя опорного гене- ратора Enable Internal Reference Buffer (см. п. 1.10.3 на стр. 106), после чего нажать кнопку ОК, что возвращает процесс к конфигурированию ADC0. Далее нужно нажать кнопку изменения тактовой частоты преобразователя Change SAR и вы- брать необходимую частоту, например 2000000 Гц. Встроенный калькулятор не- медленно вычислит необходимое значение управляющего кода AD0SC для за- грузки в регистр управления преобразователя (см. Рис. 4.20). И наконец, необхо- димо установить флажок левого выравнивания результата Left justify ADC0H:ADC0L registers. Нажатие кнопки ОК завершает процесс конфигуриро- вания ADC0. Затем нужно открыть окно Timers и па вкладке таймера 0 выбрать опцию ре- жима 3 — 8 Bit Counter/Timer Auto-Reload, а в текстовых полях Timer Initial Value для младшего и старшего байта вписать значение, рассчитанное с учетом частоты SYSCLK = 2 МГц, коэффициента предделения SYSCLK/12 и времени переполне- ния 400 мкс: Timer Value = 256 - 400-2/12 — 189 = BDH. Вид окна Timers после конфигурирования показан на Рис. 4.20. Нажатие кнопки ОК в этом окне завершает конфигурирование таймеров. Затем нужно or крыть окно Port I/O, выбрать для используемых выводов портов PI и Р2 режим Push-Pull и установить флажок Enable Crossbar. Нажатие кнопки ОК в этом окис завершает конфигурирование МК. После этого код конфигурации, сохраненный п файле Voltmeter conf, содержит пять подпрограмм: конфигурации источников сброса, конфигурации таймеров, конфигурации аналого-цифровых преобразопа гелей, конфигурации опорного напряжения и конфигурации ввода/вывода.
4.4. Цифровой вольтметр Put. 4.20. Цифр1 >uuii no ibiMcrp конфигурация МК
Глава 4. Примеры построения измерительных и управляющих систем на базе МК SiLabs \ \ Исходный код для цифрового вольтметра, сохраненный в файле Voltmeter, приведен ниже. Задача 33: Цифровой вольтметр .•Voltmeter .ASM ;--------------- Глобальные/локальные переменные ----- $INCLUDE(C8051F020.INC); Файл с определениями для МК extrn code (Init_Device) Константы pntl EQU RO ; Указатель 1 pnt2 EQU R1 ; Указатель 2 cnt_hf EQU R2 ; Счетчик полукадров cnt_r EQU R3 ; Счетчик строк cnt_d EQU R4 ; Счетчик цифр cnt_b EQU R5 ; Счетчик битов loop_cnt EQU R6 ; Счетчик цикла gain EQU R7 ; Коэффициент усиления f — Сегменты my_stack segment rseg ds idata my_stack 10h my_data J SEGMENT RSEG DATA my_data BIN_A: DS 3 ; Двоичное число A BIN_B: DS 3 ; Двоичное число В TIMEL: DS 1 ; Младший байт счетчика времени TIMEH: DS 1 ; Старший байт счетчика времени BUF_7S: DS 3 ; Буфер 7-сегментных кодов BUF_P: DS 6 ; Буфер портов my_idata SEGMENT RSEG IDATA my_idata BUF_BCD: DS 4 ; Буфер Unpacked BCD my_bit SEGMENT RSEG BIT my_bit Error: DBIT 1 ; Флаг ошибки Point: DBIT 1 ; Флаг точки _l_sec: DBIT cseg 1 ; Флаг времени at 0 f org LJMP org Ijmp org Векторы прерываний 00h ; Вектор сброса Config OOObh ; Вектор таймера 0 TMR0_ISR 0B3h ; Конец области прерываний 1 — Код инициализации Config: mov Icall sp,#my_stack-l ; Инициализация стека lnit_Device ; Вызов подпрограммы конфигурации
4.4. Цифровой вольтме' mov gain,#0 setb EA ; Разрешить прерывания i — Главная программа - -k'k-k'k'kie-k'k'i ***** состояние MESURE ************************* Ml: clr Error ; Ml.Инициализация состояния MESURE mov BIN_A,#0 mov BIN_A+1,#0 mov BIN_A+2,#0 mov loop_cnt,#0 М2: setb ADOBUSY ; М2.Пуск АЦП М3: jbe AD0INT,M4 ; М3.Готово? sjmp М3 M4: mov a,BIN_A ; М4.Сложить отсчет с суммой add a,ADC0L mov BIN_A,a mov a,BIN_A+l adde a,ADC0H mov BIN_A+l,a mov a,B!N_A+2 jnc M5 inc BIN_A+2 M5: djnz loop_cnt, М2 ; М5.256 раз? jbe AD0WINT,M8 ; M6.AD0WINT? М7: cjne gain,#0,C1 ; М7.Вычислить усредненный результат mov a,gain mov loop_cnt,a М71: mov a,BIN_A+2 clr c rrc a mov BIN_A+2,a mov a,BIN_A+l rrc a mov BIN_A+l,a djnz loop_cnt,M71 jmp Cl М8: mov a,#0C0H ; М8.Регулирование коэффициента усиления cjne a,ADC0H,M81 М81: jc M82 cjne gain,#4,M83 jmp M7 М82: cjne gain,#0,M84 jmp M10 М83: inc gain jmp M9 М84: dec gain М9: mov ADCOCF.gain ; М9.Изменить коэффициент усиления nop ; Задержка nop nop
Глава 4. Примеры построения измерительных и управляющих систем на базе МК SiLabs jmp М2 М10: mov BIN_A+1,#O ; MIO.Обнулить результат mov BIN_A+2,#0 setb Error ; Установить флаг Error г** ***** ^ ****** Состояние CONVERSION ********************* Cl: clr Point Cl .Инициализация состояния CONVERSION mov BIN_A, BIN_A+1 mov BIN_A+l,BIN_A+2 mov BIN_A+2,#0 mov loop_cnt,#4 mov pntl,#BUF_BCD С2: call SHIFTAL ; C2.Умножить двоичную дробь на 10 (2+8) mov BIN_B,BIN_A mov BIN_B+1,BIN_A+1 mov BIN_B+2,BIN_A+2 call SHIFTAL call SHIFTAL mov a,BIN_A add a,BIN_B mov BlN_A,a mov a,BIN_A+l addc a,BIN_B+l mov BIN_A+l,a mov a,BIN_A+2 addc a,BIN_B+2 mov BIN_A+2,#0 ; СЗ.Отделить и сохранить целую часть mov @pntl,a ; как цифру BCD inc pntl djnz loop_cnt,C2 ; С4.4 цифры? mov pntl,#BUF_BCD ; C5.Установить указатель на начало ; буфера BCD cjne @pntl,#0,C8 ; С6.Цифра 0? inc pntl ; С7.Инкремент указателя setb Point ; Установить флаг Point С8: mov dptr,#Tab7s ; С8.Преобразовать в 7-сегментный код mov loop_cnt,#3 mov pnt2,#BUF_7S С81: mov a,@pntl move a,@a+dptr mov @pnt2,a inc pntl inc pnt2 djnz loop_cnt,C81 jb Error,C93 ; C9.Поставить точку jnb Point,C92 orl BUF_7S,#08H jmp CIO С92: orl BUF_7S+l,#08H jmp CIO
4.4. Цифровой вольтметр С93: СЮ: WORDS: W2: W3: W4: W6: W7: / .******* orl mov mov mov mov mov mov mov mov cjne cjne clr sjmp mov rlc mov mov rlc mov inc mov rlc mov dec djnz inc djnz inc inc djnz mov mov clr mov mov mov setb setb BUF_7S+2,#08H cnt_r,#3 pntl,#BUF_P BUF_P,#13h BUF_P+2,#15h BUF_P+4,#16h cnt_d,#3 pnt2,#BUF_7S cnt_b,#3 cnt_r,#2,W6 cnt_b,#3,W6 c W7 a,@pnt2 a @pnt2,a a,@pntl a Spntl, a pntl a,@pntl a @pntl,a pntl cnt_b,W4 pnt2 cnt_d,W3 pntl pntl cnt_r,W2 '****** Состояние TIMEL,#low 2500 TIMEH, #high 2500 _l_sec cnt_hf,#2 cnt_r,#3 pntl,#BUF_P trO etO f***************** ; СЮ .Сформировать 3 слова ; для управления индикацией ; W1.1.Установить счетчик строк = 3 ; W1.2.Установить указатель буфера портов ; W1.3.Инициализировать биты общих выводов ; W2.1.Установить счетчик цифр = 3 ; W2.2.Установить указатель буфера ; 7-сег. кода ; W3.Установить счетчик бит = 3 ; W4.3-ft бит 2-го слова? ; W5.Очистить перенос ; W6.Сдвинуть 7-сегментный код влево ; W7.Сдвинуть слово влево через перенос ; W8.Bce биты? ; W9.Инкремент указателя 7-сегментного кода ; WIO.Bce цифры? ; W11.Инкремент указателя буфера портов ; W12.Bce слова? DISPLAY *********************** ; D1.Установить время индикации ; Очистить флаг _l_sec ; D2.Установить счетчик полукадров ° 2 ; D3.Установить счетчик строк = 3 ; D4.Установить указатель буфера портов ; D5.Запустить таймер 0 ; D6.Разрешить прерывания таймера 0 ******************************* jnb _l_sec,$ ; 5. l_sec = 1? jmp Ml SHIFTAL: mov clr a,BIN_A ;Сдвиг 3-байтного двоичного числа влево с
Глава 4. Примеры построения измерительных и управляющих систем на базе МК SiLabs rlc mov mov rlc mov mov rlc mov ret a BIN_A,a a,BIN_A+l a BIN_A+l,a a,BIN_A+2 a BIN_A+2,a TMR0_ISR: mov a,@pntl ; Tl.Вывести слово в порты mov Pl,а ; Инвертировать слово cpl а ; Инкрементировать указатель mov @pntl,а inc pntl mov a,@pntl mov Р2,а cpl а mov @pntl,а inc pntl djnz cnt_r,Т7 ; Т2.Все строки? djnz cnt_hf,T5 ; ТЗ.Все п/кадры? mov cnt_hf,#2 ; Т4.Установить счетчик полукадров = 2 T5: mov cnt_r,#3 ; Т5.Установить счетчик строк = 3 mov pntl,#BUF_P ; Тб.Установить указатель буфера портов T7: djnz TIMEL,ext ; Т7.Время закончилось? djnz TIMEH,ext clr trO ; Т8.Остановить таймер clr etO ; Запретить прерывания setb _l_sec ; T9.Установить флаг _l_sec ext: reti Таблицы Tab7 s: db 0E7h,21h,76h,73h,OBlh,0D3h,0D7h,61h,0F7h,Of3h END В разделе «Константы» присвоены символические имена всем 8 регистрам ра- бочего банка 0. В разделе «Сегменты» определен переместимый сегмент DATA, переместимый сегмент IDATA и переместимый сегмент BIT, в которых определе- ны переменные, буферы и флаги в соответствии со структурой данных решаемой задачи (см. Рис. 4.14). В разделе «Векторы прерываний» в дополнение к традици- онному вектору сброса определен вектор прерываний таймера 0 в соответствии с Табл. 1.4. В разделе «Код инициализации» добавлена команда обнуления пере- менной gain (G = 1), а также команда глобального разрешения прерывания. Код, приведенный в разделе «Главная программа», построен согласно граф-схемам ал- горитмов (см. Рис. 4.15, 4.16, 4.18 и 4.19,а) и снабжен подробными комментария- ми. Сумма отсчетов накапливается в трехбайтной переменной BIN_A (оператор
4.4. Цифровой вольтметр М4): содержимое регистров преобразователя прибавляется к младшим байтам этой переменной, и если при сложении есть перенос, то инкрементируется стар ший байт. Деление на 256 при усреднении результата измерения (оператор М7) осуществляется простым отбрасыванием младшего байта этой переменной, аде ление на коэффициент усиления производится путем сдвига результата вправо gain раз (gain = log2G). Изменение коэффициента усиления реализуется пересыл кой переменной gain в регистр управления АЦП (оператор М9). Умножение дно ичной дроби на 10 (оператор С2) выполнено путем сдвига дроби влево (умноже- ние на 2), затем еще двух сдвигов влево (умножение на 8) и последующего сложе ния. Операции выполняются с использованием трехбайтовых переменных BIN_A и BIN B. Для сдвига трехбайтовой переменной BIN A влево используется подпрограмма SHIFTAL. В разделе «Подпрограммы» приведен код подпрограм мы SHIFTAL. В разделе «Подпрограммы обработки прерываний» содержится код подпрограммы обработки прерывания таймера 0, построенный в соответствии с граф-схемой алгоритма Рис. 4.19,6. В заключительном разделе «Таблицы» опре делена таблица 7-сегментных кодов (см. Рис. 4.17,а). Данная программа требует 45.3 байта внутренней памяти (число после точки означает число единиц битовой памяти) и 581 байт программной памяти. Можно заключить, что для решения задачи использовано 18% внутренней памяти данных, 0% внешней памяти данных, менее 1% памяти программ и примерно 10% перифе рийных узлов. Читатель теперь в состоянии оценить сложность задач, которые мо гут быть решены с использованием МК С8051 Fxxx фирмы Silicon Laboratories. Внимательный читатель наверняка обратил также внимание на то, что во всех проектах, описанных в данной книге, на этапе конфигурирования выполняется запрет работы сторожевого таймера. Задачей сторожевого таймера (см. п. 1.5.2 на стр. 44) является реинициализация МК в случае зацикливания программы в ре- зультате сбоя. Его стоит задействовать в системах, работающих в условиях силь ных электромагнитных помех (например, в системе, работающей под капотом двигателя автомобиля или работающей в непосредственной близости от электро сварочного аппарата, и т. п.). Однако на этапе отладки программы его все равно надо запретить, иначе внезапный сброс МК просто мешает процессу отладки и способен сбить с толку неопытного разработчика. Только после завершения от ладки, запуска проектируемой системы в реальном времени,, точного измерения времени ее цикла можно выбрать соответствующее время переполнения стороже вого таймера и произвести его реконфигурирование с помощью мастера коифн гурации (Configuration Wizard 2), отменив запрет на его работу. Кроме того, цугом редактирования основного программного кода необходимо в основной рабочий цикл ввести команду перезагрузки сторожевого таймера (см. Рис. 1.20).
Заключение На основании представленных в настоящей книге материалов можно заклю- чить, что микроконтроллеры C8051Fxxx фирмы Silicon Laboratories являются универсальной базой для построения встроенных систем управления различны- ми объектами по технологии «Система на кристалле», обладающих высокими технико-экономическими характеристиками. С учетом требований к проектируе- мой системе всегда можно выбрать подходящую модель МК (см. Приложение 2). Средства проектирования фирмы Silicon Laboratories обеспечивают эффек тивный процесс разработки системы: упрощают построение макета системы, предоставляют удобный графический интерфейс для программирования, позво- ляют автоматизировать разработку программ конфигурирования МК. Подробные сведения о технических возможностях МК, способах подключе- ния к МК аналоговых и цифровых датчиков, элементов управления, среде in отображения информации и исполнительных устройств, возможностях средств проектирования, методах алгоритмизации и языках программирования позволя! разработчику создавать конкурентоспособные изделия для различных областей применения. Автор надеется, что справочный материал, методы и примеры, описанные в настоящей книге, а также материалы и программное обеспечение, имеющиеся па прилагаемом компакт-диске, будут полезны в этом отношении инженерам pat работникам, а также студентам технических вузов.
Приложение 1_____________ Включаемый файл ассемблера для МК 8051F020 ; FILE NAME : C8051F020.INC ; TARGET MCUs: C8051F020, 'F021, ’F022, 'F023 ; DESCRIPTION: Register/bit definitions for the C8051F02x product family. ; REVISION 1.0 .•REGISTER DEFINITIONS PO DATA 080H PORT 0 SP DATA 081H STACK POINTER DPL DATA 082H DATA POINTER - LOW BYTE DPH DATA 083H DATA POINTER - HIGH BYTE P4 DATA 084H PORT 4 P5 DATA 085H PORT 5 P6 DATA 086H PORT 6 PCON DATA 087H POWER CONTROL TCON DATA 088H TIMER CONTROL TMOD DATA 089H TIMER MODE TLO DATA 08AH TIMER 0 - LOW BYTE TL1 DATA 08BH TIMER 1 - LOW BYTE THO DATA 08CH TIMER 0 - HIGH BYTE THl DATA 08DH TIMER 1 - HIGH BYTE CKCON DATA 08EH CLOCK CONTROL PSCTL DATA 08FH PROGRAM STORE R/W CONTROL Pl DATA 090H PORT 1 TMR3CN DATA 091H TIMER 3 CONTROL TMR3RLL DATA 092H TIMER 3 RELOAD REGISTER - LOW BYTE TMR3RLH DATA 093H TIMER 3 RELOAD REGISTER - HIGH BYTE TMR3L DATA 094H TIMER 3 - LOW BYTE
Приложение 1. Включаемый файл ассемблера для МК 8051F020 TMR3H DATA 095H TIMER 3 - HIGH BYTE Р7 DATA 096H PORT 7 SCONO DATA 098H SERIAL PORT 0 CONTROL SBUFO DATA 099H SERIAL PORT 0 BUFFER SPIOCFG DATA 09 AH SERIAL PERIPHERAL INTERFACE 0 CONFIGURATION SPIODAT DATA 09BH SERIAL PERIPHERAL INTERFACE 0 DATA ADC1 DATA 09CH ADC 1 DATA SPIOCKR DATA 09DH SERIAL PERIPHERAL INTERFACE 0 CLOCK RATE CONTROL CPTOCN DATA 09EH COMPARATOR 0 CONTROL CPT1CN DATA 09FH COMPARATOR 1 CONTROL P2 DATA OAOH PORT 2 EMIOTC DATA 0A1H EMIF TIMING CONTROL EMIOCF DATA 0A3H EXTERNAL MEMORY INTERFACE (EMIF) CONFIGURATION POMDOUT DATA 0A4H PORT 0 OUTPUT MODE CONFIGURATION P1MDOUT DATA 0A5H PORT 1 OUTPUT MODE CONFIGURATION P2MDOUT DATA 0A6H PORT 2 OUTPUT MODE CONFIGURATION P3MDOUT DATA 0A7H PORT 3 OUTPUT MODE CONFIGURATION IE DATA 0A8H INTERRUPT ENABLE SADDRO DATA 0A9H SERIAL PORT 0 SLAVE ADDRESS ADC1CN DATA OAAH ADC 1 CONTROL ADC1CF DATA OABH ADC 1 ANALOG MUX CONFIGURATION AMX1SL DATA OACH ADC 1 ANALOG MUX CHANNEL SELECT P3IF DATA OADH PORT 3 EXTERNAL INTERRUPT FLAGS SADEN1 DATA OAEH SERIAL PORT 1 SLAVE ADDRESS MASK EMIOCN DATA OAFH EXTERNAL MEMORY INTERFACE CONTROL P3 DATA OBOH PORT 3 OSCXCN DATA 0B1H EXTERNAL OSCILLATOR CONTROL OSCICN DATA 0B2H INTERNAL OSCILLATOR CONTROL P74OUT DATA 0B5H PORTS 4-7 OUTPUT MODE FLSCL DATA 0B6H FLASH MEMORY TIMING PRESCALER FLACL DATA 0B7H FLASH ACESS LIMIT IP DATA 0B8H INTERRUPT PRIORITY SADENO DATA 0B9H SERIAL PORT 0 SLAVE ADDRESS MASK AMXOCF DATA OBAH ADC 0 MUX CONFIGURATION AMXOSL DATA OBBH ADC 0 MUX CHANNEL SELECTION ADCOCF DATA овен ADC 0 CONFIGURATION P1MDIN DATA OBDH PORT 1 INPUT MODE ADCOL DATA OBEH ADC 0 DATA - LOW BYTE ADCOH DATA OBFH ADC 0 DATA - HIGH BYTE SMBOCN DATA OCOH SMBUS 0 CONTROL SMBOSTA DATA 0C1H SMBUS 0 STATUS SMBODAT DATA 0C2H SMBUS 0 DATA SMBOADR DATA 0C3H SMBUS 0 SLAVE ADDRESS ADCOGTL DATA 0C4H ADC 0 GREATER-THAN REGISTER - LOW BYTE ADCOGTH DATA 0C5H ADC 0 GREATER-THAN REGISTER - HIGH BYTE ADCOLTL DATA ОСбН ADC 0 LESS-THAN REGISTER - LOW BYTE ADCOLTH DATA 0C7H ADC 0 LESS-THAN REGISTER - HIGH BYTE T2CON DATA 0C8H TIMER 2 CONTROL T4CON DATA 0C9H TIMER 4 CONTROL RCAP2L DATA OCAH TIMER 2 CAPTURE REGISTER - LOW BYTE RCAP2H DATA OCBH TIMER 2 CAPTURE REGISTER - HIGH BYTE TL2 DATA OCCH TIMER 2 - LOW BYTE TH2 DATA OCDH TIMER 2 - HIGH BYTE
Приложение 1. Включаемый файл ассемблера для МК 8051F020 SMBOCR DATA OCFH SMBUS 0 CLOCK RATE PSW DATA ODOH PROGRAM STATUS WORD REFOCN DATA OD1H VOLTAGE REFERENCE 0 CONTROL DACOL DATA 0D2H DAC 0 REGISTER - LOW BYTE DACOH DATA 0D3H DAC 0 REGISTER - HIGH BYTE DACOCN DATA 0D4H DAC 0 CONTROL DAC1L DATA 0D5H DAC 1 REGISTER - LOW BYTE DAC1H DATA 0D6H DAC 1 REGISTER - HIGH BYTE DAC1CN DATA OD7H DAC 1 CONTROL PCAOCN DATA 0D8H РСА 0 COUNTER CONTROL PCAOMD DATA 0D9H РСА 0 COUNTER MODE PCAOCPMO DATA ODAH CONTROL REGISTER FOR РСА 0 MODULE 0 PCAOCPM1 DATA ODBH CONTROL REGISTER FOR РСА 0 MODULE 1 PCA0CPM2 DATA ODCH CONTROL REGISTER FOR РСА 0 MODULE 2 PCAOCPM3 DATA ODDH CONTROL REGISTER FOR РСА 0 MODULE 3 PCA0CPM4 DATA ODEH CONTROL REGISTER FOR РСА 0 MODULE 4 ACC DATA OEOH ACCUMULATOR XBRO DATA OE1H DIGITAL CROSSBAR CONFIGURATION REGISTER 0 XBR1 DATA 0E2H DIGITAL CROSSBAR CONFIGURATION REGISTER 1 XBR2 DATA OE3H DIGITAL CROSSBAR CONFIGURATION REGISTER 2 RCAP4L DATA OE4H TIMER 4 CAPTURE REGISTER - LOW BYTE RCAP4H DATA OE5H TIMER 4 CAPTURE REGISTER - HIGH BYTE EIE1 DATA OE6H EXTERNAL INTERRUPT ENABLE 1 EIE2 DATA 0E7H EXTERNAL INTERRUPT ENABLE 2 ADCOCN DATA OE8H ADC 0 CONTROL PCAOL DATA 0E9H РСА 0 TIMER - LOW BYTE PCAOCPLO DATA OEAH CAPTURE/COMPARE REGISTER FOR РСА 0 MODULE BYTE 0 - LOW PCAOCPL1 DATA OEBH CAPTURE/COMPARE REGISTER FOR РСА 0 MODULE BYTE 1 - LOW PCA0CPL2 DATA OECH CAPTURE/COMPARE REGISTER FOR РСА 0 MODULE BYTE 2 - LOW PCAOCPL3 DATA OEDH CAPTURE/COMPARE REGISTER FOR РСА 0 MODULE BYTE 3 - LOW PCA0CPL4 DATA OEEH CAPTURE/COMPARE REGISTER FOR РСА 0 MODULE BYTE 4 - LOW RSTSRC DATA OEFH RESET SOURCE В DATA OFOH В REGISTER SCON1 DATA OF1H SERIAL PORT 1 CONTROL SBUF1 DATA 0F2H SERAIL PORT 1 DATA SADDR1 DATA 0F3H SERAIL PORT 1 TL4 DATA 0F4H TIMER 4 DATA - LOW BYTE TH4 DATA 0F5H TIMER 4 DATA - HIGH BYTE EIP1 DATA OF6H EXTERNAL INTERRUPT PRIORITY REGISTER 1 EIP2 DATA OF7H EXTERNAL INTERRUPT PRIORITY REGISTER 2 SPIOCN DATA 0F8H SERIAL PERIPHERAL INTERFACE 0 CONTROL PCAOH DATA 0F9H РСА 0 TIMER - HIGH BYTE PCAOCPHO DATA OFAH CAPTURE/COMPARE REGISTER FOR РСА 0 MODULE BYTE 0 - HIGH PCAOCPH1 DATA OFBH CAPTURE/COMPARE REGISTER FOR РСА 0 MODULE BYTE 1 - HIGH PCA0CPH2 DATA OFCH CAPTURE/COMPARE REGISTER FOR РСА 0 MODULE 2 - HIGH BYTE
Приложение 1. Включаемый файл ассемблера для МК8051F020 РСАОСРНЗ DATA OFDH ; CAPTURE/COMPARE REGISTER FOR РСА 0 MODULE 3 ; BYTE - HIGH РСА0СРН4 DATA Ofeh ; CAPTURE/COMPARE REGISTER FOR РСА 0 MODULE 4 - HIGH ; BYTE WDTCN DATA OFFH ; WATCHDOG TIMER CONTROL BIT DEFINITIONS ICON 88Н ITO BIT TCON.O ; EXT. INTERRUPT 0 TYPE IE0 BIT TCON.l ; EXT. INTERRUPT 0 EDGE FLAG ITI BIT TCON.2 ; EXT. INTERRUPT 1 TYPE IE1 BIT TCON.3 ; EXT. INTERRUPT 1 EDGE FLAG TRO BIT TCON.4 ; TIMER 0 ON/OFF CONTROL TEO BIT TCON.5 ; TIMER 0 OVERFLOW FLAG TRI BIT TCON.6 ; TIMER 1 ON/OFF CONTROL TF1 ; SCONO ! BIT Э8Н TCON.7 ; TIMER 1 OVERFLOW FLAG RI BIT SCONO.0 ; : RECEIVE INTERRUPT FLAG TI BIT SCONO.1 ; : TRANSMIT INTERRUPT FLAG RB8 BIT SCONO.2 ; ; RECEIVE BIT 8 TB8 BIT SCONO.3 ; : TRANSMIT BIT 8 REN BIT SCONO.4 ; : RECEIVE ENABLE SM2 BIT SCONO.5 ; ; MULTIPROCESSOR COMMUNICATION ENABLE SMI BIT SCONO.6 ; ; SERIAL MODE CONTROL BIT 1 SMO ; IE A8H BIT SCONO.7 ; ; SERIAL MODE CONTROL BIT 0 EXO BIT IE.0 EXTERNAL INTERRUPT 0 ENABLE ETC BIT IE.1 TIMER 0 INTERRUPT ENABLE EXI BIT IE.2 EXTERNAL INTERRUPT 1 ENABLE ET1 BIT IE.3 TIMER 1 INTERRUPT ENABLE ES BIT IE. 4 SERIAL PORT INTERRUPT ENABLE ET2 BIT IE.5 TIMER 2 INTERRUPT ENABLE EA ; IP B8H BIT IE.7 GLOBAL INTERRUPT ENABLE PXO BIT IP.O EXTERNAL INTERRUPT 0 PRIORITY PTO BIT IP. 1 TIMER 0 PRIORITY PX1 BIT IP.2 EXTERNAL INTERRUPT 1 PRIORITY PT1 BIT IP.3 TIMER 1 PRIORITY PS BIT IP.4 SERIAL PORT PRIORITY PT2 ; SMBOCN BIT COH IP. 5 TIMER 2 PRIORITY SMBTOE BIT SMBOCN.0 ; SMBUS 0 TIMEOUT ENABLE SMBFTE BIT SMBOCN.1 ; SMBUS 0 FREE TIMER ENABLE AA BIT SMBOCN.2 ; SMBUS 0 ASSERT/ACKNOWLEDGE FLAG SI BIT SMBOCN.3 ; SMBUS 0 INTERRUPT PENDING FLAG STO BIT SMBOCN.4 ; SMBUS 0 STOP FLAG STA BIT SMBOCN. 5 ; SMBUS 0 START FLAG
Приложение 1. Включаемый файл ассемблера для МК 80t ENSMB BIT SMBOCN.6 ; SMBUS 0 ENABLE ; T2CON C8H CPRL2 BIT T2CON.O ; CAPTURE OR RELOAD SELECT CT2 BIT T2CON.1 ; TIMER OR COUNTER SELECT TR2 BIT T2CON.2 ; TIMER 2 ON/OFF CONTROL EXEN2 BIT T2CON.3 ; TIMER 2 EXTERNAL ENABLE FLAG TCLK BIT T2CON.4 ; TRANSMIT CLOCK FLAG RCLK BIT T2CON.5 ; RECEIVE CLOCK FLAG EXF2 BIT T2CON.6 ; EXTERNAL FLAG TF2 BIT T2CON.7 ; TIMER 2 OVERFLOW FLAG ; PSW DOH P BIT PSW.O ; ACCUMULATOR PARITY FLAG Fl BIT PSW.l ; USER FLAG 1 OV BIT PSW. 2 ; OVERFLOW FLAG RSO BIT PSW.3 ; REGISTER BANK SELECT 0 RSI BIT PSW. 4 ; REGISTER BANK SELECT 1 FO BIT PSW. 5 ; USER FLAG 0 AC BIT PSW. 6 ; AUXILIARY CARRY FLAG CY BIT PSW. 7 ; CARRY FLAG ; PCAOCN D8H CCFO CCF1 CCF2 CCF3 CCF4 CR CF BIT BIT BIT BIT BIT BIT BIT PCAOCN.0 ; PCAOCN.1 ; PCAOCN.2 , PCAOCN.3 ; PCAOCN.4 , PCAOCN.6 , PCAOCN.7 ; ; PCA 0 MODULE 0 INTERRUPT FLAG ; PCA 0 MODULE 1 INTERRUPT FLAG ; PCA 0 MODULE 2 INTERRUPT FLAG ; PCA 0 MODULE 3 INTERRUPT FLAG ; PCA 0 MODULE 4 INTERRUPT FLAG ; PCA 0 COUNTER RUN CONTROL BIT ; PCA 0 COUNTER OVERFLOW FLAG ; ADCOCN E8H ADOLUST BIT ADCOCN.0 ; ; ADC 0 RIGHT JUSTIFY DATA BIT ADOWINT BIT ADCOCN.1 , ; ADC 0 WINDOW COMPARE INTERRUPT FLAG ADOSTMO BIT ADCOCN.2 , ; ADC 0 START OF CONVERSION MODE BIT 0 AD0STM1 BIT ADCOCN.3 , ; ADC 0 START OF CONVERSION MODE BIT 1 ADOBUSY BIT ADCOCN.4 ; : ADC 0 BUSY FLAG ADOINT BIT ADCOCN.5 , ; ADC 0 CONVERISION COMPLETE INTERRUPT FLAG ADOTM BIT ADCOCN.6 ; ; ADC 0 TRACK MODE ADOEN BIT ADCOCN.7 ; ; ADC 0 ENABLE ; SPIOCN F8H SPIEN BIT SPIOCN.0 ; ; SPI 0 SPI ENABLE MSTEN BIT SPIOCN.1 ; : SPI 0 MASTER ENABLE SLVSEL BIT SPIOCN.2 ; : SPI 0 SLAVE SELECT TXBSY BIT SPIOCN.3 ; : SPI 0 TX BUSY FLAG RXOVRN BIT SPIOCN.4 ; : SPI 0 RX OVERRUN FLAG MODF BIT SPIOCN.5 ; : SPI 0 MODE FAULT FLAG WCOL BIT SPIOCN.6 i : SPI 0 WRITE COLLISION FLAG SPIF BIT SPIOCN.7 ; ; SPI 0 INTERRUPT FLAG
Приложение 2 Микроконтроллеры смешанного сигнала фирмы Silicon Laboratories Микросхема Произво- дительность [MIPS] (шах) Флэш-память [Кбайт] ОЗУ [байт] Интерфейс внеш, памяти Линии вв./выв. [бит] Послед, интерфейс Таймер (16-бит) Прогр. массив счетчиков [каналы] C8051F000 20 32 256 — 32 UART, SMBus, SPI 4 5 C805IF001 20 32 256 — 16 UART, SMBus, SPI 4 5 C8051F002 20 32 256 8 UART, SMBus, SPI 4 5 C8051F005 25 32 2304 — 32 UART, SMBus, SPI 4 5 C8051F006 25 32 2304 — 16 UART, SMBus, SPI 4 5 C805IF007 25 32 2304 — 8 UART, SMBus, SPI 4 5 C8051F010 20 32 256 — 32 UART, SMBus, SPI 4 5 C8051F011 20 32 256 — 16 UART, SMBus, SPI 4 5 C8O51F0I2 20 32 256 — 8 UART, SMBus, SPI 4 5 C8051F015 25 32 2304 — 32 UART, SMBus, SPI 4 5 C8051F0I6 25 32 2304 — 16 UART, SMBus, SPI 4 5 C805IF0I7 25 32 2304 — 8 UART, SMBus, SPI 4 5 C805IF018 25 16 1280 — 32 UART, SMBus, SPI 4 5 C805IF019 25 16 1280 — 16 UART, SMBus, SPI 4 5 C805IF020 25 64 4352 • 64 2 UARTs, SMBus, SPI 5 5 C8051F021 25 64 4352 • 32 2 UARTs, SMBus, SPI 5 5 C805IF022 25 64 4352 • 64 2 UARTs, SMBus, SPI 5 5 C8051F023 25 64 4352 • 32 2 UARTs, SMBus, SPI 5 5 C805IF040 25 64 4352 • 64 CAN2.0B, 2 UARTs, SMBus, SPI 5 6 C805IF041 25 64 4352 • 32 CAN2.0B, 2 UARTs, SMBus, SPI 5 6 C805IF042 25 64 4352 • 64 CAN2.0B, 2 UARTs, SMBus, SPI 5 6 C805IF043 25 64 4352 • 32 CAN2.0B, 2 UARTs, SMBus, SPI 5 6 080511'044 25 64 4352 • 64 CAN2.0B, 2 UARTs, SMBus, SPI 5 6 С80511045 25 64 4352 • 32 OAN2.0B, 2 UARTs, SMBus, SPI 5 6
Приложение 2 Микроконтроллеры смешанного сигнала фирмы Silicon Laboratories Погрешность внутрен. генератора АЦП1 [бит, кан., тыс. выб./с] АЦП2 [бит, кан., тыс. выб./с] ЦАП [бит, кан.] Датчик температуры Источи, опор. напр. Количество компараторов Другие особенности Корпус ±20% 12,8, 100 — 12,2 • • 2 — TQFP-64 ±20% 12, 8, 100 — 12,2 • • 2 — TQFP-48 ±20% 12,4, 100 — 12,2 • • 1 — LQFP-32 ±20% 12, 8, 100 — 12,2 • • 2 — TQFP-64 ±20% 12,8, 100 — 12,2 • • 2 — TQFP-48 ±20% 12,4, 100 — 12,2 • • 1 — LQFP-32 " ±20% 10, 8, 100 — 12,2 • • 2 — TQFP-64 ±20% 10, 8, 100 — 12,2 • • 2 — TQFP-48 ±20% 10, 4, 100 — 12,2 • • 1 — LQFP-32 ±20% 10,8, 100 — 12,2 • • 2 — TQFP-04 ±20% 10, 8, 100 — 12,2 • • 2 — TQFP-48 ±20% 10, 4, 100 — 12,2 • • 1 — LQFP-32 ±20% 10,8, 100 — — • • 2 — TQFP 64 ±20% 10, 8, 100 — __ • • 2 — TQI P 48 ±20% 12, 8, 100 8, 8, 500 12,2 • • 2 — TQFP 100 ±20% 12, 8, 100 8, 8, 500 12,2 • • 2 — FQFP 64 ±20% 10, 8, 100 8, 8, 500 12,2 • • 2 — FQFP 100 ±20% 10,8, 100 8, 8, 500 12,2 • • 2 — TQFP 64 ±2% 12, 13, 100 8, 8, 500 12,2 • • 3 ±60-В вход. усил. TQFP iuu ±2% 12, 13, 100 8, 8, 500 12,2 • • 3 ±60-В вход. усил. TQFP-64 ±2% 10, 13, 100 8, 8, 500 12,2 • • 3 ±60-В вход. усил. TQFP-100 ±2% 10. 13, IUU 8, 8, 500 12,2 • • 3 ±60 В вход. усил. FQFP-64 ±2% 10 13, 100 — — • • 3 : 60 В вход. усил. IQ1 P 100 ±2% 10. 13, 100 — • • 3 3 60 В вход. усил. 1Q1 P 64
Приложение 2. Микроконтроллеры смешанного сигнала фирмы Silicon Laboratories Микросхема Произво- дительность [MIPS] (max) Флэш-память [Кбайт] ОЗУ [байт] Интерфейс внеш, памяти Линии вв./выв. [бит] Послед, интерфейс Таймер (16-бит) Прогр. массив счетчиков [каналы] C805IF046 25 64 4352 • 64 CAN2.0B, 2 UARTs, SMBus, SPI 5 6 C8051F047 25 64 4352 • 32 CAN2.0B, 2 UARTs, SMBus, SPI 5 6 C8051F060 25 64 4352 • 59 CAN2.0B, 2 UARTs, SMBus, SPI 5 6 C8051F061 25 64 4352 — 24 CAN2.0B, 2 UARTs, SMBus, SPI 5 6 C8051F062 25 64 4352 • 59 CAN2.0B, 2 UARTs, SMBus, SPI 5 6 C8051F063 25 64 4352 — 24 CAN2.0B, 2 UARTs, SMBus, SPI 5 6 C8051F064 25 64 4352 • 59 2 UARTs, SMBus, SPI 5 6 C8051F065 25 64 4352 — 24 2 UARTs, SMBus, SPI 5 6 C8051F066 25 32 4352 • 59 2 UARTs, SMBus, SPI 5 6 C8051F067 25 32 4352 — 24 2 UARTs, SMBus, SPI 5 6 C8051F120 100 128 8448 • 64 2 UARTs, SMBus, SPI 5 6 C805IFI21 100 128 8448 • 32 2 UARTs, SMBus, SPI 5 6 C8051FI22 100 128 8448 • 64 2 UARTs, SMBus, SPI 5 6 C8051F123 100 128 8448 • 32 2 UARTs, SMBus, SPI 5 6 C8051F124 50 128 8448 • 64 2 UARTs, SMBus, SPI 5 6 C8051F125 50 128 8448 • 32 2 UARTs, SMBus, SPI 5 6 C805IFI26 50 128 8448 • 64 2 UARTs, SMBus, SPI 5 6 C805IF127 50 128 8448 • 32 2 UARTs, SMBus, SPI 5 6 C8051FI30 100 128 8448 • 64 2 UARTs, SMBus, SPI 5 6 C8051FI31 100 128 8448 • 32 2 UARTs, SMBus, SPI 5 6 C805IFI32 100 64 8448 • 64 2 UARTs, SMBus, SPI 5 6 C8051F133 100 64 8448 • 32 2 UARTs, SMBus, SPI 5 6 C8051F206 25 8 1280 — 32 UART, SPI 3 — C805IF220 25 8 256 — 32 UART, SPI 3 C805IF221 25 8 256 22 UART, SPI 3 C8051F226 25 8 1280 32 UART, SPI 3 C8051F230 25 8 256 — 32 UART, SPI 3 — C8051F23I 25 8 256 — 22 UART, SPI 3 — C8051F236 25 8 1280 32 UART, SPI 3 — C8051F300 25 8 256 - 8 UART, SMBus 3 3'' C8051F30I 25 8 256 - 8 UART, SMBus 3 3 C8051F302 25 8 256 - 8 UART, SMBus 3 3 C8051F303 25 8 256 - 8 UART, SMBus 3 3 J C8051F304 25 4 256 - 8 UART, SMBus 3 3 C8051F305 25 2 256 8 UART, SMBus 3 3 C805IF310 25 16 16 1280 — 29 UART, SMBus, SPI 4 3J C8O51F3I1 25 1280 — 25 UART, SMBus, SPI 4 4 C8051F312 25 8 1280 — 29 UART, SMBus, SPI 4 4*^ C805IF3I3 25 8 1280 — 25 UART, SMBus, SPI 4 4 ] C805IF3I4 25 8 1280 — 29 UART, SMBus, SPI 4 5 C805IF3I5 25 8 1280 — 25 UART, SMBus, SPI 4 4
Приложение 2. Микроконтроллеры смешанного сигнала фирмы Silicon Laboratorh Погрешность внутрен. генератора АЦП1 [бит, кан., тыс. выб./с] АЦП2 [бит, кан., тыс. выб./с] ЦАП [бит, кан.] Датчик температуры Источи, опор. напр. Количество компараторов Другие особенности Корпус ±2% 10,13, 100 — — • • 3 ±60-В вход. усил. TQFP-100 ±2% 10,13, 100 — — • • 3 ±60-В вход. усил. TQFP-64 ±2% 16,1, 1000 16, 1, 1000 12,2 • • 3 АЦПЗ: 10, 8, 200, ПДП TQFP 100 ±2% 16,1, 1000 16, 1, 1000 12,2 • • 3 АЦПЗ: 10, 8, 200, ПДП TQFP-64 ±2% 16,1, 1000 16, 1, 1000 12, 2 • • 3 АЦПЗ: 10, 8, 200, ПДП TQFP-100 ±2% 16,1, 1000 16, 1, 1000 12,2 • • 3 АЦПЗ: 10, 8, 200, ПДП TQFP-64 ±2% 16,1, 1000 16, 1, 1000 — — • 3 ПДП TQFP юи ±2% 16, 1, 1000 16, 1, 1000 — — • 3 ПДП TQFP 64 ±2% 16, 1, 1000 16, 1, 1000 — — • 3 ПДП TQFP-1O0 ±2% 16, 1, 1000 16, 1, 1000 — — • 3 ПДП TQFP-64 ±2% 12,8,100 8, 8, 500 12,2 • • 2 16x16 умнож. аккум. TQFP 100 ±2% 12,8, 100 8, 8, 500 12,2 • • 2 16х16умнож. аккум. TQFP 64 ±2% 10,8, 100 8, 8, 500 12,2 • 2 16x16 умнож. аккум. TQFP 100 ±2% 10,8, 100 8, 8, 500 12,2 • • 2 16x16 умнож. аккум. TQFP 64 ±2% 12, 8, 100 8, 8, 500 12,2 • • 2 — TQFP-100 ±2% 12, 8, 100 8, 8, 500 12, 2 • • 2 — TQFP-64 ±2% 10, 8, 100 8, 8, 500 12,2 • • 2 — TQFP-100 ±2% 10, 8, 100 8, 8, 500 12,2 • • 2 — TQFP-64 ±2% 10,8, 100 — — • • 2 16x16 умнож. аккум. TQFP-100 ±2% 10, 8, 100 — — • • 2 16x16 умнож. аккум. TQFP 64 ±2% 10, 8, 100 — — • • 2 16x16 умнож. аккум. TQFP-loo ±2% 10, 8, 100 — — • • 2 16x16 умнож. аккум. TQFP 64 ±20% 12, 32, 100 — — — — 2 — TQFP-48 ±20% 8,32, 100 — — — — 2 — TQFP 48 ±20% 8, 32, 100 — — — — 2 — LQFP-32 I ±20% 8,32, 100 — — — — 2 — TQFP 48 1 ±20% — — — — — 2 — TQFP 48 ±20% — — — — — 2 — LQFP-32 ±20% — — — — — 2 — TQFP 48 ±2% 8, 8, 500 — — • — 1 — Ml P II ±2% — — — — — 1 — MI P II ±20% 8, 8, 500 — — • — 1 — Ml P II ±20% — — — — — 1 — Ml P 11 ±20% — — — — — 1 — Ml P 11 ±20% — — — — — 1 — MI P II 1 ±2% 10,21,200 — — • — 2 — I QI P-32 1 ±2% 10, 17,200 — — • — 2 — Ml P-28 ±2% 10,21,200 — — • — 2 2 2 — 1 QI P-32 г ±24 10, 17, 200 — — • — — Ml P 28 Il 1 ±2*‘ — — — • — — LQFP-32 If 12% — •• — • — 2 — Ml P 28
Приложение 2. Микроконтроллеры смешанного сигнала фирмы Silicon Laboratories Микросхема Произво- дительность [MIPS] (max) Флэш-память [Кбайт] ОЗУ [байт] Интерфейс внеш.памяти Линии вв./выв. [бит] Послед, интерфейс Таймер (16-бит) Прогр. массив счетчиков [каналы] C8O51F316 25 16 1280 — 21 UART, SMBus, SPI 4 5 C8O51F3I7 25 16 1280 — 21 UART, SMBus, SPI 4 5 C805IF320 25 16 2304 — 25 USB2.0, UART, SMBus, SPI 4 5 C8O5IF32I 25 16 2304 — 21 USB 2.0, UART, SMBus, SPI 4 5 C8051F326 25 16 1536 — 15 USB 2.0, UART 2 - C805IF327 25 16 1536 — 15 USB 2.0, UART 2 - C8051F330 25 8 768 — 17 UART, SMBus, SPI 4 3 C805IF330D 25 8 768 — 17 UART, SMBus, SPI 4 3 C805IF331 25 8 768 — 17 UART, SMBus, SPI 4 3 С8051F332 25 4 768 — 17 UART, SMBus, SPI 4 3 C8O51F333 25 4 768 — 17 UART, SMBus, SPI 4 3 C8051F334 25 2 768 — 17 UART, SMBus, SPI 4 3 C805IF335 25 2 768 — 17 UART, SMBus, SPI 4 3 C805IF340 48 64 5376 • 40 USB 2.0, 2 x UART, SMBus, SPI 4 5 C805IF34I 48 32 3328 • 40 USB 2.0, 2 x UART, SMBus, SPI 4 5 C8051F342 48 64 5376 — 25 USB 2.0, UART, SMBus, SPI 4 5 C805IF343 48 32 3328 — 25 USB 2.0, UART, SMBus, SPI 4 5 C8051F344 25 64 5376 • 40 USB 2.0, 2 x UART, SMBus, SPI 4 5 С8051F345 25 32 3328 • 40 USB 2.0, 2 x UART, SMBus, SPI 4 5 C8051F346 25 64 5376 — 25 USB 2.0, UART, SMBus, SPI 4 5 C8051F347 25 32 3328 — 25 USB 2.0, UART, SMBus, SPI 4 5 C8051F350 50 8 768 — 17 UART, SMBus, SPI 4 3 C8051F351 50 8 768 — 17 UART, SMBus, SPI 4 3 C8051F352 50 8 768 — 17 UART, SMBus, SPI 4 3 C8O51F353 50 8 768 — 17 UART, SMBus, SPI 4 3 C8051F4I0 50 32 2304 — 24 UART, SMBus, SPI 4 6 C805IF41I 50 32 2304 — 20 UART, SMBus, SPI 4 6 C8051F4I2 50 16 1280 — 24 UART, SMBus, SPI 4 6 C805IF4I3 50 16 1280 — 20 UART, SMBus, SPI 4 6
Приложение 2. Микроконтроллеры смешанного сигнала фирмы Silicon Laboratories Погрешность внутрен. генератора АЦП1 [бит, кан., тыс. выб./с] АЦП2 [бит, кан., тыс. выб./с] ЦАП [бит, кан.] Датчик температуры Источи, опор. напр. Количество компараторов Другие особенности Корпус ±2% 10, 13, 200 — — • — 2 — QFN-24 ±2% — — — • — 2 — Q1N-24 ±1.5% 10, 17, 200 — — • • 2 — LQI Р .32 ±1.5% 10. 13, 200 — — • • 2 — QFN-28 ±1.5% — — — — — — отд. питание вв./выв. QIN-28 ±1.5% — — — — — — — QIN-28 ±2% 10, 16, 200 — 10, 1 • • 1 — Ml Р 20 ±2% 10, 16, 200 — 10, 1 • • 1 — PDIP 20 ±2% — — — — — 1 — Ml Р-20 ±2% 10, 16, 200 __ — • • 1 — Ml Р-20 ±2% — — — — — 1 — MLP-20 ±2% 10, 16, 200 — — • • 1 — MLP-20 ±2% — — — — 1 — MI P 20 ±1.5% 10, 17, 200 — — • • 2 — TQFP-48 ±1.5% 10, 17, 200 — — • • 2 — TQFP-48 ±1.5% 10, 17, 200 — — • • 2 — LQFP 32 ±1.5% 10, 17, 200 — • • 2 — LQFP-32 ±1.5% 10, 17, 200 — — • • 2 — TQFP 48 ±1.5% 10, 17, 200 — — • • 2 — TQFP-48 ±1.5% 10, 17, 200 — — • • 2 — LQFP-32 + 1.5% 10, 17, 200 — — • • 2 — LQFP-32 ±2% 24, 8, I — 8,2 • — 1 — I QFP-32 ±2% 24, 8, 1 — 8,2 • — 1 — MLP-28 ±2% 16, 8, 1 — 8,2 • — 1 — LQFP-32 ±2% 16. 8, 1 — 8,2 • — 1 — MI P-28 ±2% 12, 24, 200 — 12,2 • • 2 стаб. напр.,часы реал. вр. LQFP-32 ±2% 12, 20, 200 — 12,2 • • 2 стаб. напр.,часы реал. вр. MLP-28 ±2% 12,24, 200 — 12,2 • • 2 стаб. напр.,часы реал. вр. LQFP-32 ±2% 12, 20, 200 — 12,2 • • 2 стаб. напр. .часы реал, вр Ml P-28
Литература 1. Schultz Т С and the 8051. 3-rd Edition. PageFree Publishing Inc., 2004, 412 p. 2. Hamming R..W. Error Detecting and Error Correcting Codes // The Bell System Technical Journal, 1950,- No.2. pp. 147-160. 3. Using a Z8® MCU for Power Phase Control. Application Note AP96Z8X0600. Zilog, Inc. http://www.zilog.com 4. 12C® Compatible 256-Position Digital Potentiometers AD5241/ AD5242. Analog Devices, Inc. - 2002. http://www.analog.com 5. Serially Interfaced, 8-Digit LED Display Drivers MAX7219/MAX7221. Maxim Integrated Products, 1997. http://www.maxim-ic.com 6. DMOS Driver for Bipolar Stepper Motor. STMicroelectronics, 2002. http://www.st.com 7. LMD18201, ЗА55VH- Bridge. National Semiconductor, 2000. http://www.national.com 8. Low Current Seven Segment Displays. Technical Data. Agilent Technologies, Inc., 2003. http://www.agilent.com/semiconductors 9. Liquid Crystal Display. Product Catalog. Seiko Instruments, Inc., 1998. http://www.sii.co.jp/compo 10. Salvatori S., Di Nucci G. Two-wire, four-by-four keyboard interface saves power// EDN, August 17, 2006/ - pp. 70-72. http://www.edn.com 11. LM-35 Precision Centigrade Temperature Sensors. National Semiconductor, 2000. http://www.national.com 12. Barr M., Wagner B. Introduction to Digital Filters//Embedded System Programming, Nov. 19, 2002. http://www.embedded.com/showArticle,jhtml?articleID = 9900828 13. Гладштейн M. Проектируем устройства на микроконтроллерах //Радио. 2000. №11, 12.
МИХАИЛ АРКАДЬЕВИЧ ЕПАДШТЕЙН Микроконтроллеры смешанного сигнала C8051Fxxx фирмы Silicon Laboratories и их применение Руководство пользователя Главный редактор В. М. Халикеев Научный редактор В. Б. Ежов Технический редактор Н. В. Тищенко Графика и верстка И. С. Койиовои Подписано в печать 10.12.2007. Формат 70x100/16. Бумага офсетная. Гарнитура «NewtonC». Печать офсетная. Объем 23,5 п.л. + вкл. 0,125 п. л. Усл. печ. л. 30,5 + вкл. 0,125 Тираж 3000 экз. Код SILABS. Заказ № 1121. Издательский дом «Додэка-ХХ1» ОКИ 95 3000 105318 Москва, а/я 70. ТелУфакс: (495) 366-24-29, 366-09-22 E-mail: boor@dodecfaru; red@dodeca.ru Отпечатано с готовых диапозитивов в ОАО «Московская типография № 6» 115088 Москва, Южпопорговая ул., 24