ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ РФ МОСКОВСКИЙ ИНЖЕНЕРНО-ФИЗИЧЕСКИЙ ИНСТИТУТ (ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ)
Н.А. Дми...
44 downloads
247 Views
10MB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ РФ МОСКОВСКИЙ ИНЖЕНЕРНО-ФИЗИЧЕСКИЙ ИНСТИТУТ (ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ)
Н.А. Дмитриев, М.Н. Ёхин
УНИВЕРСАЛЬНЫЙ ЛАБОРАТОРНЫЙ СТЕНД. АППАРАТНЫЕ СРЕДСТВА ПРОЕКТИРОВАНИЯ ВСТРАИВАЕМЫХ СИСТЕМ
МОСКВА 2009
ББК 32.973.26-02я7 УДК 004.382.4(075) Д 53 Дмитриев Н.А., Ёхин М.Н. Универсальный лабораторный стенд. Аппаратные средства проектирования встраиваемых систем: Учебное пособие. – М.: МИФИ, 2009. – 116 с. В пособии рассмотрены организация аппаратных средств универсального лабораторного стенда (УЛС), особенности использования его основных составных частей и примеры решения некоторых типовых задач проектирования компонентов встраиваемых систем. Учебное пособие предназначено для обеспечения лабораторного практикума и курсового проектирования по курсу «Микропроцессорные системы» специальности 2301.01 «Вычислительные машины, комплексы, системы и сети». Рецензент А.Л. Зорин Утверждено редсоветом института в качестве учебного пособия.
ISBN 978-5-7262-1129-9
© Московский инженерно-физический институт (государственный университет), 2009
Редактор Е.Н. Кочубей Оригинал-макет изготовлен С.В. Тялиной Подписано в печать 10.04.2009. Формат 60×84 1/16. Уч.-изд. л. 7,25. Печ. л. 7,25. Тираж 100 экз. Изд. № 011-1. Заказ №
Московский инженерно-физический институт (государственный университет). 115409, Москва, Каширское ш., 31 2
ОГЛАВЛЕНИЕ ВВЕДЕНИЕ ..............................................................................................6 1. Структура аппаратных средств УЛС..............................................10 1.1. Общее описание конструкции универсального лабораторного стенда ..........................................................10 1.2. Структура аппаратных средств УЛС ...................................12 1.3. ПЛИС FPGA XCS10-3-PC84 .................................................13 1.4. MK F80C552 ...........................................................................15 1.5. Селектор адреса внешней памяти и устройств ввода-вывода....................................................17 1.6. Постоянное запоминающее устройство (ПЗУ) ...................19 1.7. Эмулятор ПЗУ .......................................................................20 1.8. Внешнее ОЗУ данных ...........................................................21 1.9. ОЗУ для хранения контрольных точек ................................21 1.10. Контроллер клавиатуры и индикации .................................22 1.11. Алфавитно-цифровой жидкокристаллический индикатор ...............................................................................27 2. Особенности архитектуры МК PCF80C552 ....................................31 2.1. Особенности архитектуры и организации памяти ................31 2.2. Регистры специальных функций ............................................35 2.3. Организация прерываний. Особенности использования внешних прерываний в УЛС ...................................................41 2.4. Работа с параллельными портами ввода-вывода. Особенности их использования в УЛС ..................................44 2.5. Таймер Т2 .................................................................................46 2.6. Сторожевой таймер Т3............................................................53 2.7. Аналого-цифровой преобразователь ....................................54 2.8. Широтно-импульсный модулятор...........................................57 3. Типовые задачи проектирования компонентов встраиваемых систем на основе УЛС ...........................................59 3.1. Общие принципы организации программного обмена МК с устройством на ПЛИС. Циклы внешней шины МК .......................................................59 3.2. Организация обмена по прерываниям между МК и устройством на ПЛИС ..........................................................62 3.3. Организация программного обмена по флагу готовности внешнего устройства ...........................................66 3
3.4. Организация программного обмена с использованием буфера FIFO .............................................69 3.5. Программное управление работой АЦП ...............................72 3.6. Программирование контроллера клавиатуры и индикации ..............................................................................73 3.7. Программирование вывода символьной информации на ЖКИ ......................................................................................77 3.8. Измерение временных интервалов и подсчет внешних событий при помощи таймеров Т0 и Т1 ................................80 3.9. Формирование временных интервалов при помощи таймера Т2 ...............................................................................91 Список литературы .............................................................................103 Приложение 1 ................................................................................104 Приложение 2 ................................................................................111
4
Список сокращений
АЦП ШИМ ИС САПР ПО ОЗУ ЦАП
– – – – – – –
аналого-цифровой преобразователь широтно-импульсный модулятор интегральная схема Система автоматизирования проектных работ программное обеспечение оперативное запоминающее устройство цифро-аналоговый преобразователь
5
ВВЕДЕНИЕ В настоящее время CБИС микропроцессоров и программируемой логики являются основой построения цифровых систем для управления техническими устройствами и технологическими процессами в реальном времени. Такие системы называют встраиваемыми системами. Типичная встраиваемая система состоит из микроконтроллера (МК), представляющего собой процессорное ядро (например, AVR, ARM7, MCS-51) с набором периферийных устройств (порты параллельного и последовательного ввода/вывода, таймер, АЦП, ШИМ) а также схем программируемой логики (ПЛИС) FPGA или CPLD для аппаратной реализации критичных по быстродействию алгоритмов обработки данных или построения специфических пользовательских устройств. Обобщенная структура встраиваемой системы показана на рис. В.1.
Рис. В.1. Обобщенная структура встраиваемой системы 6
Объединение МК и ПЛИС в одной системе сочетает преимущества двух способов реализации алгоритмов обработки информации – программного и аппаратного. Фактически создается гибкая универсальная платформа для использования в различных проектах. Она приспосабливается для решения задач пользователя программированием ее составных частей. Исторически первые системы подобного класса выполнялись в виде конструкций одноплатных модулей (System on board – SOB), представляющих печатную плату с установленными на ней микросхемами. Успехи микроэлектроники позволили перейти к объединению бескорпусных ИС процессорного ядра, программируемой логики и памяти программ/данных в одном корпусе интегральной схемы (System in package – SIP). Последнее революционное достижение интегральной технологии позволяет создавать встраиваемые системы уже на одном кристалле (System on chip – SOC). Однако ни структурная организация, ни способы взаимодействия составных частей данных вариантов конструктивного исполнения встраиваемой системы практически не отличаются друг от друга. Это сохраняет общность подходов к проектированию встраиваемых систем независимо от способов их конструктивного выполнения. Технология встраиваемых систем в виде SOB более доступна в реализации, что предпочтительно для организации процесса ее изучения и практического освоения. Полученные при этом знания и навыки могут быть востребованы и при разработке встраиваемых систем, выполненных по другим технологиям, в том числе современных SOC-систем с использованием IP (Intellectual property) – ядер. Разработка встраиваемых систем является сложной и трудоемкой задачей. Проектирование и автономная отладка их отдельных составных частей – программного обеспечения МК и устройств на ПЛИС поддерживается инструментальными средствами стандартных промышленных САПР и интегрированных сред. Важным этапом проектирования является комплексная отладка, которая завершает полный цикл разработки встраиваемой системы. Для решения этой задачи используются специальные комплексы, включающие аппаратную платформу для создания прототипа проектируемой системы, инструментальную ЭВМ, и отладочные программные и аппаратные средства (симуляторы, эмуляторы, логические анализа7
торы, осциллографы). На рис. В.2 приведен типовой маршрут разработки программного обеспечения МК встраиваемой системы. Методика разработки устройств на ПЛИС предполагает выполнение идентичных этапов: описание проекта в схемном редакторе или на одном из языков описания аппаратуры, например VHDL, функциональное и временное моделирование, отработка проекта на целевой или прототипной плате и получение «прошивки» для программирования ПЛИС в готовом изделии.
Рис. В.2. Типовой маршрут разработки ПО МК встраиваемой системы
Особенностью проектирования гетерогенных встраиваемых систем на МК и ПЛИС, является то, что первые два этапа их проектирования поддерживаются автономными инструментальными средствами. Отладочные средства для реализации третьего этапа должны создаваться разработчиками платформ для отработки про8
тотипов систем с учетом специфики организации их аппаратных средств. Такие средства должны обеспечивать не только автономную, но и комплексную отладку ПО для МК и проекта на ПЛИС. При организации процесса обучения проектированию встраиваемых систем на основе МК и ПЛИС важна установка на освоение полного цикла проектирования как гарантии высокого уровня подготовки специалистов. С этой целью на кафедре КСиТ разработан универсальный лабораторный стенд (УЛС) на основе МК PCF80C552 (семейства MCS-51) и ПЛИС FPGA XCS10-3-PC84, который можно рассматривать как базовую аппаратную платформу для создания прототипа встраиваемой системы, выполненной в виде SOB. Кроме этого, УЛС обеспечивает возможность как автономного использования ПЛИС и МК, так и наращивания его функциональных возможностей путем подключения дополнительных устройств к внешней шине МК. Для реализации рассмотренных выше маршрутов проектирования ПО МК и проектов на ПЛИС на инструментальной ЭВМ, подключенной к УЛС, установлены учебные версии САПР ПЛИС и инструментальных средств проектирования ПО МК, а также специально разработанные отладочные среды. Эти особенности УЛС позволяют реализовать на его основе унифицированную лабораторную базу единой учебной среды по всем дисциплинам схемотехнического цикла специальности 2201: «Теория автоматов», «Схемотехника ЭВМ», «Организация ЭВМ», «Функционально-логическое моделирование», «Интерфейсы ЭВМ», «Микропроцессорные системы». Целью пособия является описание особенностей построения и функционирования аппаратной части УЛС, изложение некоторых типовых приемов работы с его составными частями при решении учебных задач, выполняемых студентами в рамках лабораторных практикумов по перечисленным выше курсам. Изучение предлагаемого материала будет способствовать более эффективному формированию и закреплению практических навыков работы со средствами проектирования и отладки сложных цифровых систем.
9
1. СТРУКТУРА АППАРАТНЫХ СРЕДСТВ УЛС 1.1. ОБЩЕЕ ОПИСАНИЕ КОНСТРУКЦИИ УЛС
Рис. 1.1. Внешний вид УЛС
На рис. 1.1 показан внешний вид УЛС со стороны лицевой панели. Стенд состоит из приборного корпуса и помещенных в него четырехслойной печатной платы с двумя выносными блоками 16-канального анализатора. Корпус снабжен лицевой панелью, состоящей из прозрачного экрана и наклеенной на него декоративной пленки. В панель вмонтированы кнопочная клавиатура 4×4 и группы тумблеров с кнопками управления. На лицевой панели имеются три прозрачных окна. В главном окне, расположенном слева, можно наблюдать фрагмент печатной платы с ПЛИС FPGA, МК и БИС внешней памяти программ и данных. Здесь же размещены шесть 4-разрядных шкал светодиодных индикаторов (A, B, C, D, E и F), подключенных к ПЛИС. Рядом с ПЛИС располагается светодиодный индикатор готовности ее к работе. В исходном состоянии ПЛИС светодиод включен, а после программирования ПЛИС он выключается. В верхнем правом окне 10
расположен 4-разрядный дисплей на семисегментных индикаторах и два светодиода индикации напряжений питания +12 В и +5 В. При подаче напряжения питания на плату после включения стенда эти светодиоды должны находиться во включенном состоянии. Дисплей управляется контроллером клавиатуры и индикации, подключенным к внешней шине МК. В нижнем правом окне расположен алфавитно-цифровой жидкокристаллический индикатор (ЖКИ), который имеет две строки по 16 символов. ЖКИ также подключен к внешней шине МК. В правом нижнем углу лицевой панели расположена клавиатура 4×4, которая подключается к контроллеру клавиатуры и индикации. Для задания входных данных и управляющих сигналов ПЛИС, а также выбора режима работы МК имеются 4 группы переключателей. Группы Р1, Р2 и Р3 состоят из четырех тумблеров с номерами (3, 2, 1, 0) и подключены к ПЛИС. При верхнем положении тумблера формируется входной сигнал логической «1», а при нижнем – логического «0». Группа ГИ/ГОИ состоит из двух кнопок ГОИ1 и ГОИ2 для управления двумя встроенными в проект пользователя генераторами импульсов, а также тумблера выбора режима работы первого генератора. Если тумблер установлен в нижнее положение, то от кнопок ГОИ1 и ГОИ2 работают два генератора одиночных импульсов. При верхнем положении тумблера от кнопки ГОИ2 работает только второй генератор одиночных импульсов, а первый генератор переводится в непрерывный режим с отключением кнопки ГОИ1. Данные элементы управления также подключены к ПЛИС. Группа из трех тумблеров и кнопки предназначена для формирования управляющих сигналов МК. Тумблер INT0 обеспечивает выбор источника этого внешнего прерывания МК. При его верхнем положении источником прерывания является пользовательское устройство, выполненное на ПЛИС. При нижнем положении тумблера прерывание генерируется блоком памяти контрольных точек, когда включается отладочный режим останова пользовательской программы в контрольных точках. Тумблер СТ предназначен для управления сторожевым таймером. При его верхнем положении сторожевой таймер включен, а при нижнем – выключен. Тумблер JTAG определяет способ подключения этого порта ПЛИС. В положении «ВНЕШН» JTAG порт подключается к разъему расширения, а в положении «ВНУТР» к порту Р1 МК. 11
Кнопка «СБРОС» подключена к супервизору напряжения питания, который формирует сигналы системного сброса при нажатии указанной кнопки, а также при выходе значения напряжения питания +5 В за допустимые пределы. Через заднюю крышку стенда выведены интерфейсные разъемы и тумблер включения напряжения питания платы, а также плоские кабели подключения к инструментальной ЭВМ логического анализатора. Тумблер включения питания расположен справа. Для включения стенда тумблер должен быть установлен в правое положение, а для выключения в левое. 1.2. СТРУКТУРА АППАРАТНЫХ СРЕДСТВ УЛС В состав УЛС (рис. 1.2) входят все основные компоненты встраиваемых систем – МК, ПЛИС, память программ и данных, дополненные наборами аппаратных средств поддержки функций отладки в виде эмулятора ПЗУ и памяти контрольных точек, а также периферийного оборудования, включая контроллер клавиатуры и индикации с клавиатурой и 4-разрядным дисплеем и алфавитноцифровой ЖКИ. Рассмотрим назначение и особенности функционирования каждой из составных частей УЛС.
Рис. 1.2. Структура аппаратных средств УЛС 12
1.3. ПЛИС FPGA XCS10-3-PC84 Организация и особенности функционирования данной ПЛИС, а также порядок работы с инструментальными средствами проектирования для нее описаны в [1, 2]. Там же рассмотрены способы использования органов управления и индикации УЛС, виртуальных измерительных приборов при создании, исследовании и отладке проектов на ПЛИС (клавишные регистры, генераторы импульсов и осциллограф). Остановимся на описании дополнительных возможностей использования данной ПЛИС в составе проектируемой системы (совместно с МК), а также подключения к выводам ПЛИС 16-канального логического анализатора. Основным способом подключения ПЛИС к МК является использование системной (внешней) шины МК. При ограниченном количестве задействованных контактов ПЛИС используется следующий набор сигналов: 8-разрядная шина данных DMK[7-0], стробы чтения и записи RD и WR соответственно, внешнее прерывание INT0, вход таймера Т0 и два адресных 7FFA и 7FFB, формируемых селектором адреса. Практическая реализация различных способов обмена данными между ПЛИС и МК будет рассмотрена в гл. 3 данного пособия. Для организации взаимодействия с МК к ПЛИС подключен также параллельный порт Р4. Выводы этого порта подключены к тем же самым контактам ПЛИС, к которым подключаются шкалы А и В светодиодных индикаторов. То есть при помощи этих шкал по усмотрению пользователя можно индицировать состояние либо проекта ПЛИС, либо порта Р4 МК. Таким образом, при проектировании системы с использованием шкал А и В разработчик должен обеспечить их корректное применение, исключив возможные конфликты ПЛИС и МК при выводе информации. В силу ограниченного количества пользовательских контактов ПЛИС при подключении логического анализатора использованы контакты для шкал светодиодной индикации C, D, E и F. При подключении анализатора к проекту ПЛИС следует руководствоваться следующей табл. 1.1. При работе с логическим анализатором необходимо к проекту пользователя подключить библиотеку «МAKЕT». Шкалы светодиодных индикаторов в этом случае представлены в виде набора макроэлементов, причем каждый макроэлемент в пользовательском 13
Таблица 1.1 Канал анализатора CН А0 CН А1 CН А2 CН А3 CН А4 CН А5 CН А6 CН А7
Вывод шкалы F3 D2 D1 F0 D0 F1 F2 D3
Канал анализатора CН В0 CН В1 CН В2 CН В3 CН В4 CН В5 CН В6 CН В7
Вывод шкалы E0 E1 C2 E3 C3 E2 C1 C0
проекте может использоваться только один раз. Упомянем одну очень важную особенность совместного использования ПЛИС и МК в составе стенда. Речь идет о следующем. ПЛИС – это программируемый прибор, часть контактов которого выполняет альтернативные функции в начальном состоянии и в зависимости от конкретной пользовательской «прошивки». В частности, в исходном состоянии есть контакты, сконфигурированные как выходные и переходящие в разряд пользовательских с переключением в третье состояние «отключено» только после программирования ПЛИС. В связи ограниченным количеством контактов ПЛИС такие разделяемые контакты использовались при подключении к шине МК. Это обусловливает как положительные, так и отрицательные стороны такого специфического подключения. Дело в том, что контакт еще незагруженной ПЛИС, специфицированный до ее программирования как выходной, будучи подключенным к одной из линии данных шины МК, просто ее «подсаживает», запрещая тем самым работу МК. С одной стороны, это положительный момент, так как ПЛИС имеет в УЛС приоритет использования. Для студента, начинающего осваивать УЛС именно с проектирования на ПЛИС, нет необходимости беспокоиться о переводе МК в пассивное состояние. С другой стороны, для обеспечения последующей работы с МК необходимо предварительное программирование ПЛИС при помощи заранее подготовленного проекта как части будущей системы или технологической прошивки, входящей в состав отладочного ПО УЛС. 14
1.4. MK PCF80C552 В состав стенда входит МК PCF80C552, структура которого приведена на рис. 1.3. Он относится к семейству 80С51 (MCS-51) 8-разрядных микроконтроллеров, имеет архитектуру с разделением памяти программ и данных. АЛУ для выполнения логических и арифметических инструкций использует аккумулятор и контекстно переключаемый набор из 8 регистров общего назначения (4 банка регистров). МК семейства 80С51 занимают значительный сегмент рынка 8-разрядных МК. Для них разработаны и доступны разнообразные инструментальные средства проектирования, например, программные средства фирмы Keil (uVision, dScope), в том числе их учебные и демонстрационные версии. Данные соображения предопределили выбор МК именно этого семейства для построения УЛС. Одним из аргументов для выбора конкретного МК PCF80C552 является наличие в его составе обширного набора дополнительной периферии. Это – важный фактор, который обеспечивает вариативность содержательных индивидуальных заданий, выполняемых студентами с использованием УЛС. Рассмотрим организацию системы памяти МК PCF80C552, которая является его отличительной особенностью и определяет структурную организацию УЛС как прототипа встраиваемой системы. Внутренняя память программ отсутствует, а максимальный объем внешней памяти программ составляет 64к. Объем внутренней памяти данных составляет 256 байт, причем для младших 128 байт (адреса 00h-7Fh) можно использовать механизм прямой или косвенной адресации. В области младших 128 байт находятся 4 банка регистров общего назначения, устанавливаемый при сбросе указатель стека (07h) и область (адреса 20h-2Fh, всего 128 бит) прямоадресуемых бит. Для старших 128 байт (адреса 80h-FFh) возможна только косвенная адресация. Область адресов внутренней памяти данных 80h-FFh разделяется с прямоадресуемой областью регистров специальных функций (аккумулятор, параллельные порты ввода-вывода, регистры данных и управления встроенных периферийных устройств). К МК может подключаться внешняя память данных, максимальный объем которой составляет 64к. 15
Рис. 1.3. Структурная схема МК PCF80C552
Для организации внешней шины используются порты Р0 и Р2 МК в альтернативном режиме. Порт Р0 соответствует мультиплексированным линиям 8-разрядных данных и младшего байта адреса. На линиях порта Р2 формируется старший байт адреса. При выполнении цикла шины в фазе адреса на линии порта Р0 выдается младший байт адреса, который фиксируется в регистре-защелке сигналом ALE. В последующей фазе данных на линиях порта Р0 действуют данные, которые выдает или принимает МК. В последнем случае МК считывает как данные, так и код исполняемой программы. Для обращения к внешней памяти программ используется сигнал PSEN, а для работы с внешней памятью данных сигналы WR и RD. Указанные сигналы вырабатываются процессором автоматически при выполнении цикла внешней шины. Наличие внешней шины является еще одним аргументом, имеющим принципиальное значение для выбора МК. Это связано с тем, что структура УЛС как средства для изучения методов проектирования встраиваемых систем должна воспроизводить типовые способы взаимодействия МК с ПЛИС и другими внешними устройствами. Как правило, это – использование внешней (системной) шины или портов ввода-вывода. Именно эти способы взаимодействия реализованы в УЛС. Так, при помощи внешней шины реализо16
вано подключение к МК дополнительных интерфейсных устройств (ПЛИС, ЖКИ и контроллеров клавиатуры и индикации), порт ввода-вывода Р4 МК подключен к ПЛИС. Наличие только внешней памяти программ и возможность подключения внешней памяти данных предопределило использование в УЛС эмулятора ПЗУ как простого и эффективного отладочного средства. В заключение остановимся на организации внешнего управления МК в составе УЛС. Для синхронизации МК и ПЛИС в УЛС используется внешний кварцевый генератор, который работает с частотой 11,059 МГц. Для формирования сигнала системного сброса и контроля напряжения питания используется супервизор напряжения питания, который вырабатывает сигнал «СБРОС» при нажатии одноименной кнопки на лицевой панели стенда или при выходе напряжения питания за допустимые пределы. В составе МК имеется также сторожевой таймер Т3, предназначенный для защиты от программных сбоев. При возникновении таких сбоев таймер Т3 также вырабатывает сигнал «СБРОС», после чего МК возвращается в исходное состояние. Таймер Т3 управляется только аппаратно. В п. 1.1 описано назначение тумблера «СТ», используемого для включения/выключения таймера Т3. Некоторые отличительные особенности архитектуры МК PCF80C552 рассматриваются в гл. 2. 1.5. СЕЛЕКТОР АДРЕСА ВНЕШНЕЙ ПАМЯТИ И УСТРОЙСТВ ВВОДА-ВЫВОДА Как видно из структурной схемы аппаратных средств УЛС, к внешней шине МК подключены устройства памяти и ввода-вывода. Распределение адресного пространства между ними представлено на рис. 1.4. Рисунок показывает, что в пространстве внешней памяти программ область адресов 8000h-BFFFh используется совместно эмулятором ПЗУ и памятью контрольных точек (только в отладочном режиме). Во внешней памяти данных область адресов 8000h-BFFFh разделяется внешней памятью данных и памятью контрольных точек. В табл. 1.2 представлено распределение адресного пространства устройств ввода-вывода. 17
Рис. 1.4. Карта внешней памяти программ и данных МК УЛС Таблица 1.2 Организация пространства ввода-вывода УЛС Адрес 7FF4 7FF5 7FF6 7FF7 7FF8 7FF9 7FFA 7FFB 7FFC 7FFD 7FFE 7FFF
Описание Запись в память команд ЖКИ Запись в память данных ЖКИ Чтение из памяти команд ЖКИ Чтение из памяти данных ЖКИ Зарезервировано Зарезервировано Чтение/запись в устройство, выполненное на ПЛИС FPGA Чтение/запись в устройство, выполненное на ПЛИС FPGA Чтение/запись в устройство, подключенное через разъем расширения Чтение/запись в устройство, подключенное через разъем расширения Чтение/запись в память данных контроллера клавиатуры и индикации Чтение/запись в память команд контроллера клавиатуры и индикации
Из табл. 1.2 видно, что адреса 7FF8h и 7FF9h зарезервированы под системные функции программы монитора-загрузчика и не могут быть задействованы пользователем. Особенностью построения 18
селектора адреса является формирование не только собственно сигналов выбора устройства памяти или ввода-вывода, но и формирование сигналов управления эмулятора ПЗУ и памяти контрольных точек. Действительно, как видно из карты устройств памяти и ввода-вывода, эмулятор ПЗУ и память контрольных точек имеют двойное отображение – как в пространстве внешней памяти программ (режим исполнения пользовательской программы), так и в пространстве внешней памяти данных (запись кода пользовательской программы в эмулятор ПЗУ и кодов точек останова в память контрольных точек). Поэтому в зависимости от режима работы этих устройств селектор адреса обеспечивает доступ к ним либо по сигналу PSEN, либо по сигналам WR и RD. Еще одной особенностью схемы селектора адреса является формирование внутреннего сигнала FBP, по значению которого область пространства внешней памяти данных с адресами 8000h-BFFFh разделяется между внешней памятью данных и памятью контрольных точек. По умолчанию доступна внешняя память данных. Управление сигналом FBP осуществляется автоматически программой монитора-загрузчика при работе в отладочном режиме. 1.6. ПОСТОЯННОЕ ЗАПОМИНАЮЩЕЕ УСТРОЙСТВО ПЗУ объемом 32к предназначено для хранения кода программы монитора-загрузчика. Эта программа обеспечивает выполнение взаимодействия с инструментальной ЭВМ. По командам пользователя можно выполнять следующие действия: загружать и запускать на исполнение код целевой программы, загружать из файла или модифицировать в просмотровом окне содержимое внешней памяти данных, осуществлять пошаговое выполнение целевой программы или с остановом в контрольных точках с трассировкой переменных программы. При выполнении этих функций отладки ПО МК монитор выводит на ЖКИ служебную информацию, которая позволяет пользователю контролировать правильность своих действий. В адресном пространстве внешней памяти программ для ПЗУ зарезервирована область 0000h – 7FFFh. Это сделано для того, чтобы после нажатия кнопки «СБРОС», когда в счетчике команд МК будет находиться адрес 0000h, управление передавалось мони19
тору-загрузчику. Пользовательские программы загружаются и исполняются только из области эмулятора ПЗУ с адресами 8000hBFFFh. Это обстоятельство порождает следующую проблему. Для МК область адресов 0003h-0073h пространства внешней памяти данных отведена для адресации векторов прерываний. Чтобы сделать пользователю доступной систему прерываний МК, программа «Монитор» осуществляет перенос таблицы векторов в область эмулятора. Например, по адресу 0003h (адресу вектора внешнего прерывания INT0) в программе монитора-загрузчика помещается команда LJMP 8003h. Таким образом, у пользователя появляется возможность в доступной ему области внешней памяти программ (эмулятора ПЗУ) разместить обработчик прерывания. ПЗУ выполнено на микросхеме AT29C256-70PI. Эта микросхема FLASH-памяти с организацией 32768 слов по 8 разрядов. Время доступа составляет 70 нс, что соответствует параметрам цикла внешней шины, выполняемого МК при работе с тактовой частотой 11.059МГц. Перепрограммирование данной микросхемы осуществляется вне УЛС при помощи специального программатора (ChipProg+, например). 1.7. ЭМУЛЯТОР ПЗУ Как известно, исполняемая МК программа хранится в ПЗУ. Возникает вопрос: а как модифицировать его содержимое на этапе отладки? Одним из способов решения данной проблемы является использование эмуляции ПЗУ. В соответствии с этим принципом в структуру аппаратных средств вместо ПЗУ вводят ОЗУ. Это ОЗУ работает в двух режимах – загрузки отлаживаемой программы и ее запуска на исполнение. Первый режим, при котором данное ОЗУ отображается на выделенную область адресов внешней памяти данных (в УЛС 0000h-3FFFh), обеспечивает запись в него исполняемого кода отлаживаемой программы. Во втором режиме ОЗУ эмулятора отображается на выделенную область адресов внешней памяти программ (в УЛС 8000h-ВFFFh) и выполняет функцию ПЗУ. Управление режимами работы эмулятора ПЗУ обеспечивается системным ПО (программа «Монитор-загрузчик»). 20
Эмулятор ПЗУ выполнен на микросхеме статического ОЗУ UT62256 с организацией 32768 слов по 8 разрядов. Время доступа составляет 70 нс. 1.8. ВНЕШНЕЕ ОЗУ ДАННЫХ Внешнее ОЗУ данных предназначено для хранения данных, с которыми работает исполняемая программа. В УЛС для этой памяти объемом 32к отведена область адресов 8000h-FFFFh. Часть адресов 8000h-ВFFFh этой области разделяется с памятью контрольных точек. Порядок управления разделением этой общей области рассмотрен в п. 1.5. Особенностью использования данного вида памяти в УЛС является возможность предварительного занесения в нее данных из файла и модификация ее содержимого в просмотровом окне на этапе отладки. Последовательность действий при выполнении этих отладочных процедур рассмотрена в [3]. Внешнее ОЗУ данных выполнено на микросхеме статического ОЗУ UT62256. 1.9. ОЗУ ДЛЯ ХРАНЕНИЯ КОНТРОЛЬНЫХ ТОЧЕК Память контрольных точек предназначена для аппаратной поддержки отладки пользовательской программы в режиме ее исполнения с остановом в контрольных точках. Принцип действия этой памяти состоит в следующем. Первоначально в ее ячейки с адресами, соответствующими выбранным пользователем точкам останова, заносится маркерная информация. После запуска пользовательской программы на исполнение одновременно работают эмулятор ПЗУ и память контрольных точек. В этом режиме выводы данных памяти контрольных точек отключены от шины МК и подключены к схеме формирования сигнала прерывания INT0. Как только при выполнении пользовательской программы из эмулятора выбирается команда, по адресу которой в памяти контрольных точек записан маркер, осуществляется выработка сигнала прерывания INT0, по которому управление из пользовательской программы передается монитору-загрузчику для выполнения отладочной функции просмотра состояния МК. Напомним, что для включения этого режима 21
необходимо на лицевой панели стенда установить тумблер INT0 в нижнее положение КТ. ОЗУ для хранения контрольных точек выполнено на микросхеме статического ОЗУ UT62256. Особенность использования этой микросхемы в качестве памяти контрольных точек состоит в том, что для формирования и хранения маркерной информации используется только один разряд из восьми. 1.10. КОНТРОЛЛЕР КЛАВИАТУРЫ И ИНДИКАЦИИ Для управления выводом информации на дисплей семисегментных индикаторов и ввода данных с клавиатуры в состав стенда включен контроллер 82С79. Это программируемое устройство, которое автоматически сканирует клавиатуру, формирует и выдает код нажатой клавиши, подавляет дребезг контактов при нажатии клавиш, а также автоматически регенерирует изображение, формируемое на индикаторах дисплея путем циклического опроса видеопамяти. Выбор его режима работы осуществляется путем подачи команд управления. На рис. 1.5 показана обобщенная структурная схема контроллера 82С79.
Рис. 1.5. Обобщенная структурная схема контроллера 82С79 22
Работает контроллер следующим образом. Счетчик сканирования выдает сигналы сканирования клавиатуры и индикаторов дисплея в кодированном (двоичный код) или в декодированном (унитарный код) виде. Значение кода определяет номер знакоместа в дисплее. Для формирования изображения по значению счетчика сканирования из видеопамяти на информационные выходы дисплея DSPA[3-0] и DSPB[3-0] поступает код символа. При нажатии клавиши клавиатуры на входных линиях RET формируется ее сканкод, который заносится в FIFO. Если FIFO не пусто, то вырабатывается сигнал прерывания, который автоматически сбрасывается при обращении к контроллеру для чтения скан-кода. Перед выполнением данного чтения на контроллер 82с79 предварительно должна быть подана команда, разрешения чтения из FIFO скан-кодов нажатых клавиш. Скан-коды клавиш выглядят следующим образом: “1” – 11000000B “2” – 11000001B “4” – 11001000B “5” – 11001001B “7” – 11010000B “8” – 11010001B “*” – 11011000B “0” – 11011001B
“3” – 11000010B “6” – 11001010B “9” – 11010010B “#” – 11011010B
“A” – 11000011B “B” – 11001011B “C” – 11010011B “D” – 11011011B
В УЛС контроллер 82с79 используется в режиме декодирования линий сканирования дисплея и клавиатуры. В этом случае не требуется внешний дешифратор при обслуживании 4-разрядного дисплея при 8-разрядном коде символа и клавиатуры 4×4. Выбор 8-разрядного кода символа позволил отказаться и от использования внешних 4-разрядных дешифраторов для преобразования двоичнодесятичного кода в код семисегментного индиРис. 1.6. Соответкатора и перейти к программной реализации ствие сегментов знакогенератора. На рис. 1.6 показано соответ- индикатора битам ствие сегментов индикатора номерам битов в в байте данных байте данных. Таким образом, для отображения на индикаторе, например, шестнадцатеричных символов необходимо задавать следующие коды: «1» – 60h, «2» – B5h, « 3» – F4h, «4» – 66h, «5» – D6h, «6» – D7h, «7» – 70h, «8» – F7h, «9» – F6h, «0» – F3h, «A» – 77h, «B» – C7h, «C» – 93h, «D» – E5h, «E» – 97h , «F» – 17h. На основе приведен23
ных кодировок реализуется программный знакогенератор для шестнадцатеричного алфавита. Значение внутренней частоты синхронизации контроллера 82С79, которое определяет качество изображения на дисплее и сканирования клавиш клавиатуры, формируется программно путем задания коэффициента деления частоты внешнего генератора синхронизации. В УЛС для корректного подавления дребезга контактов клавиатуры выбрана такая частота внешней синхронизации контроллера, которая не требует программной перенастройки коэффициента деления частоты, устанавливаемого по умолчанию. Поэтому при работе с данным контроллером в составе УЛС выполнение команды, устанавливающей этот коэффициент, не требуется. В адресном пространстве внешней памяти данных МК PCF 80С552 контроллеру клавиатуры и индикации 82С79 выделены два адреса – 7FFEh – для обмена данными (код выводимого на дисплей символа или скан-код нажатой клавиши) и 7FFFh – для передачи команд управления. Система команд контроллера 82С79 приведена в табл. 1.3 Таблица 1.3 Команды контроллера клавиатуры и индикации 82С79 КОП D7D6D5
Название команды
Комментарий Разряды D4 и D3 задают режим дисплея, D2–D0 – клавиатуры
000
Установка режима работы дисплея и клавиатуры
001
Программная синхро- Разряды D4–D0 определяют код низация деления внешней частоты синхронизации
010
Чтение FIFO клавиатуры
011
Чтение видеопамяти
D4 – флаг автоинкрементирования адреса следующего символа, D3–D0 – адрес видеопамяти
100
Запись в видеопамять
D4 – флаг автоинкрементирования адреса следующего символа, D3– D0 – адрес видеопамяти 24
Продолжение табл. 1.3 КОП D7D6D5
Название команды
Комментарий
101
Гашение, запрет запи- D3 – запрет записи для линий шины си в видеопамять данных D7–D4, D2 – запрет записи для линий шины данных D3–D0, D1 – гашение выходов видеопамяти, соответствующих разрядам D7– D4, D0 – гашение выходов видеопамяти, соответствующих разрядам D3–D0
110
Сброс
111
Сброс прерывания, При D4=1 в клавиатурном режиме установка режима устанавливает режим обнаружения обнаружения ошибки ошибок. В режиме опроса датчиков сбрасывает сигнал INT
Программный сброс БИС при D0=1, сброс слова состояния и сигнала INT при D1=1, установка ячеек видеопамяти (D4=0) или ее выходов (D4=1) в значение, определяемое разрядами D2 и D3 (при D3=0 устанавливается значение 00h, при D3=1 и D2=0 устанавливается значение 20h, при D3 и D2=1 устанавливается значение FFh)
Опции команды установки режима работы дисплея и клавиатуры представлены на рис. 1.7. С учетом рассмотренных особенностей использования данного контроллера в составе УЛС при выполнении команды установки для дисплейной части могут выбираться опции только для 8-разрядного 8-символьного дисплея и дешифрированного сканирования клавиатуры. В этом режиме на линии S0–S3 выдается дешифрированный код двух младших разрядов счетчика сканирования. При этом в таком же режиме сканирования будет работать и дисплей. Поэтому если используется только дисплейная часть контроллера, то при инициализации контроллера 82С79 все равно надо задать декодированное сканирование клавиатуры. Для этого в коде 25
команды установки режима дисплея и клавиатуры в разрядах D2–D0 должно содержаться значение 001. В видеопамяти контроллера при работе в таком режиме будут использоваться только первые четыре ячейки. При работе дисплея в режиме ввода справа со сдвигом команды чтения и записи видеопамяти использовать нельзя. Примеры программирования контроллера 82С79 приводятся в гл. 3.
Рис. 1.7. Опции команды установки режима работы дисплея и клавиатуры 26
1.11. АЛФАВИТНО-ЦИФРОВОЙ ЖИДКОКРИСТАЛЛИЧЕСКИЙ ИНДИКАТОР Алфавитно-цифровой ЖКИ предназначен для вывода текстовой информации во встраиваемых системах, где осуществляется интерфейс с оператором. На ЖКИ могут выводиться сообщения, сопровождающие ход выполнения системных или пользовательских программ, формируемые по результатам выполнения тестовых программ или представляющие результат выполнения пользовательской программы. В УЛС используется ЖКИ, экран которого состоит из 2 строк по 16 знакомест. Каждое знакоместо состоит из 5×8 точек. ЖКИ имеет встроенный знакогенератор, поддерживающий стандартный набор символов английского и русского алфавита. Кодировка используемых символов представлена на рис. 1.8. Старший полубайт кода символа определяется номером столбца, а младший номером строки таблицы.
Рис. 1.8. Кодировка символов ЖКИ 27
Пользователю предоставляется возможность перекодирования до 8 символов стандартного знакогенератора. Однако эта возможность на практике используется достаточно редко. На рис. 1.9 представлена упрощенная структурная схема ЖКИ. Основой для построения индикатора является контроллер, который обеспечивает интерфейс с управляющим МК и регенерацию изображения на ЖК экране. В состав контроллера ЖКИ входят видеопамять, память знакогенератора пользователя и регистры команд и данных.
Рис. 1.9. Упрощенная структурная схема ЖКИ
В УЛС ЖКИ подключен к системной (внешней) шине МК. В пространстве адресов ввода-вывода его регистрам команд и данных выделены адреса согласно табл. 1.2. Система команд контроллера ЖКИ (или просто ЖКИ) представлена в табл. 1.4. В табл. 1.5 представлены флаги, являющиеся параметрами в соответствующих командах. В третьем столбце этой таблицы приводятся значения флагов, которые устанавливаются при включении напряжения питания. Отметим ряд особенностей использования ЖКИ в составе УЛС. Первая особенность состоит в том, что в составе ЖКИ используется стандартный контроллер, поддерживающий работу экрана с максимальным размером 2×40 знакомест. Емкость его видеопамяти составляет 80 байт. На основе этого контроллера выпускается це28
лый ряд индикаторов и с другой организацией экрана (16×1, 16×4, 20×2 и т.д.). Поэтому в ЖКИ УЛС для формирования текстового сообщения используется не вся видеопамять. Таблица 1.4 Система команд контроллера ЖКИ D7 D6
D5
D4
D3
D2
D1 D0
0
0
0
0
0
0
0
1
Очистка экрана. Установка счетчика адреса видеопамяти в 0
0
0
0
0
0
0
1
–
Установка счетчика адреса видеопамяти в 0. Сброс сдвига экрана. Сохранение содержимого видеопамяти
0
0
0
0
0
1
I/D
S
Включение режима сдвига экрана и выбор направления сдвига экрана или курсора
0
0
0
0
1
D
C
B
Включение/выключение, курсора и мерцания курсора
0
0
0
1
S/C
R/L
–
–
Сдвиг курсора или экрана, выбор направления сдвига
0
0
1
DL
F
–
–
Выбор разрядности шины данных, количества строк экрана ЖКИ и размера знакоместа
0
1
N
Назначение
ACG ACG ACG ACG ACG ACG Включение и установка счетчика адреса памяти знакогенератора. Разрешение обмена с памятью знакогенератора
1 AGG AGG AGG AGG AGG AGG AGG Включение и установка счетчика адреса видеопамяти. Разрешение обмена с видеопамятью BF AC
AC
AC
AC
AC
AC
AC
Чтение флага занятости контроллера ЖКИ и состояния счетчика адреса
Примечание: ACG, AGG и AC – обозначения выходов счетчика адреса. 29
Строкам его экрана соответствуют следующие адреса знакомест: верхней – 00h-0Fh, а нижней – 28h-37h. Еще одна особенность ЖКИ определяется значительным временем выполнения команд его контроллером. Очередная команда на ЖКИ может быть подана только после выполнения предыдущей, когда сбрасывается флаг занятости контроллера BF. Очевидно, для ожидания сброса BF необходимо организовать циклическое выполнение команды чтения регистра команд. Таблица 1.5 Назначение флагов команд ЖКИ Обозначение I/D
Функция
Значение по умолчанию
I/D = 1 инкремент, I/D = 0 декремент
1
S = 1 выбор сдвига экрана, S = 0 выбор сдвига курсора
0
S/C
S/C = 1 сдвиг экрана, S/C = 0 сдвиг курсора
-
R/L
R/L = 1 сдвиг вправо, R/L = 0 сдвиг влево
-
S
DL
DL = 1
8 бит, DL = 0 4 бита
1
2 строки, N = 0 1 строка
0
N
N=1
F
F=1 5×10 точек, F = 0
5×8 точек.
0
BF
BF = 1 контроллер ЖКИ занят, BF = 0 свободен
-
D
D = 1 дисплей включен, D = 0 выключен
0
C
C = 1 курсор включен, C = 0 выключен
0
B
B = 1 мерцание курсора включено, B = 0 выключено
0
Примеры программирования ЖКИ приводятся в гл. 3.
30
2. ОСОБЕННОСТИ АРХИТЕКТУРЫ МК PCF80C552 2.1. ОСОБЕННОСТИ АРХИТЕКТУРЫ И ОРГАНИЗАЦИЯ ПАМЯТИ МК PCF80C552 относится к семейству 80С51 (MCS-51) и выполняет его стандартный набор команд. Для повышения эффективности использования во встраиваемых системах в состав МК введен ряд дополнительных устройств: 8-разрядный параллельный порт ввода-вывода Р4; входной порт Р5, линии которого являются также входами встроенного 8-канального 10-разрядного АЦП; 16-разрядный таймер Т2 с регистрами защелками и цифровыми компараторами для измерения и формирования временных интервалов; последовательный интерфейс I2C; 2-канальный широтно-импульсный модулятор; сторожевой таймер. Особенности организации памяти МК рассмотрены в п. 1.4. На рис. 2.1 приведена карта памяти.
Рис. 2.1. Карта памяти МК PCF80C552 31
На рис. 2.2 представлена карта младшей части внутренней памяти данных (адреса 00h – 7Fh). В этой области располагаются 4 банка регистров общего назначения (РОН) R0-R7. Текущий используемый банк определяется значением двух разрядов RS1 и RS0 статусного регистра PSW. Контекстное переключение банка РОН является удобным механизмом для работы с подпрограммами и при обработке прерываний. 128 прямоадресуемых бит с адресами 0h7Fh занимают область памяти с адресами 20h-2Fh. Адрес 07h является начальным значением регистра-указателя стека SP, которое устанавливается в нем после прохождения сигнала «СБРОС». При таком значении SP началом занимаемой стеком области памяти будет адрес 08h. Максимальная глубина стека составляет 256 байт.
Рис. 2.2. Карта младшей части внутренней памяти данных (адреса 00h – 7Fh) 32
МК имеет расширенный набор из 56 регистров специальных функций, к которому относятся все регистры за исключением счетчика команд и четырех банков РОН. На рис. 2.3 приведена карта области регистров специальных функций. Большинство регистров специальных функций предназначены для организации работы со встроенными интерфейсными устройствами.
Рис. 2.3. Карта области регистров специальных функций 33
Рис. 2.4. Обозначения и адреса битов побитно адресуемых регистров специальных функций 34
Ряд регистров используется для выполнения арифметикологических команд (ACC, B, PSW) в качестве указателя стека SP и регистров указателей данных DPH и DPL для хранения адреса при обращении к устройству, отображаемому на пространство внешней памяти данных (в УЛС это собственно внешняя память данных (8000h-FFFFh) и устройства ввода-вывода (7FF4h-7FFFh)). Регистры специальных функций имеют прямую адресацию в области 80hFFh. 16 регистров, адреса которых заканчиваются на 0 или 8, имеют побитовую адресацию. При выполнении записи или чтения по свободным адресам из данной области функция запоминания не выполняется. На рис. 2.4 представлены обозначения и адреса битов побитно адресуемых регистров специальных функций. 2.2. РЕГИСТРЫ СПЕЦИАЛЬНЫХ ФУНКЦИЙ Рассмотрим основные регистры специальных функций базовой архитектуры 80С51 и ряд регистров дополнительных периферийных устройств. 1. PSW – побитно адресуемый регистр слова состояния программы. PSW.7
PSW.6
PSW.5
PSW.4
PSW.3
PSW.2
PSW.1
PSW.0
CY
AC
F0
RS1
RS0
OV
F1
P
Назначение битов: CY – флаг переноса; AC – дополнительный флаг переноса; FO – флаг пользователя 0; RS1 – старший бит адреса банка РОН; RS0 – младший бит адреса банка РОН; OV – флаг переполнения; F1 – флаг пользователя 1; P – флаг четности, устанавливается аппаратно после выполнения каждой команды и определяет четное/нечетное число единиц в аккумуляторе. 35
2. IEN0 – побитно адресуемый регистр разрешения прерываний. IENO.7 EA
IEN0.6
IEN0.5
IEN0.4
IEN0.3
IEN0.2
IEN0.1
IEN0.0
EAD
ES1
ES0
ET1
EX1
ET0
EX0
Назначение битов: EA – запрещение всех прерываний при ЕА = 0. При ЕА = 1 каждое прерывание разрешается индивидуально; EAD – разрешение прерывания от АЦП; ES1 – разрешение прерывания от I2C; ES0 – разрешение прерывания от UART; ET1 – разрешение прерывания от таймера Т1; EX1 – разрешение внешнего прерывания INT1; ET0 – разрешение прерывания от таймера Т0; EX0 – разрешение внешнего прерывания INT. 3. IEN1 – побитно адресуемый регистр разрешения прерывания от таймераТ2. IEN1.7
IEN1.6
IEN1.5
IEN1.4
IEN1.3
IEN1.2
IEN1.1
IEN1.0
ET2
ECM2
ECM1
ECM0
ECT3
ECT2
ECT1
ECT0
Назначение битов: ET2 – разрешение прерывания при переполнении таймера Т2; ECM2 – разрешение прерывания от компаратора 2 таймера Т2; ECM1 – разрешение прерывания от компаратора 1 таймера Т2; ECM0 – разрешение прерывания от компаратора 0 таймера Т2; ECT3 – разрешение прерывания от регистра-защелки 3 таймера Т2; ECT2 – разрешение прерывания от регистра-защелки 2 таймера Т2; ECT1 – разрешение прерывания от регистра-защелки 1 таймера Т2; ECT0 – разрешение прерывания от регистра-защелки 0 таймера T2. 36
4. IP0 – побитно адресуемый регистр приоритета прерываний. IP.7 –
IP.6
IP.5
IP.4
IP.3
IP.2
IP.1
IP.0
PAD
PS1
PS0
PT1
PX1
PT0
PX0
Назначение битов: PAD – приоритет прерывания от АЦП; РS1 – приоритет прерывания от I2C; РS0 – приоритет прерывания от UART; РT1 – приоритет прерывания от таймера Т1; РX1 – приоритет внешнего прерывания INT1; РT0 – приоритет прерывания от таймера Т0; РX0 – приоритет внешнего прерывания INT. 5. IP1 – побитно адресуемый регистр приоритета прерываний от таймера Т2. IP1.7 PT2
IP1.6
IP1.5
IP1.4
IP1.3
IP1.2
IP1.1
IP1.0
PCM2
PCM1
PCM0
PCT3
PCT2
PCT1
PCT0
Назначение битов: PT2 – приоритет прерывания при переполнении от таймера Т2; РCM2 – приоритет прерывания от компаратора 2 таймера Т2; РCM1 – приоритет прерывания от компаратора 1 таймера Т2; РCM0 – приоритет прерывания от компаратора 0 таймера Т2; РCT3 – приоритет прерывания от регистра-защелки 3 таймера Т2; РCT2 – приоритет прерывания от регистра-защелки 2 таймера Т2; РCT1 – приоритет прерывания от регистра-защелки 1 таймера Т2; PCT0 – приоритет прерывания от регистра-защелки 0 таймера Т2. 6. TCON – побитно адресуемый регистр управления таймерамисчетчиками Т0 и Т1 и конфигурации внешних прерываний INT0 и INT1. 37
TCON.7 TCON.6 TCON.5 TCON.4 TCON.3 TCON.2 TCON.1 TCON.0 TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
Назначение битов: TF1 – флаг переполнения таймера Т1. Устанавливается аппаратно при переполнении и сбрасывается аппаратно при входе в обработчик этого прерывания; TR1 – разрешение работы таймера Т1. При TR1 = 1 таймер Т1 включен, при TR1 = 0 выключен (устанавливается/сбрасывается программно); TF0 – флаг переполнения таймера Т0. Устанавливается аппаратно при переполнении и сбрасывается аппаратно при входе в обработчик этого прерывания; TR0 – разрешение работы таймера Т0. При TR0 = 1 таймер Т0 включен, при TR0 = 0 выключен (устанавливается/сбрасывается программно); IE1 – флаг обнаружения сигнала прерывания на входе внешнего прерывания INT1. Устанавливается аппаратно при обнаружении и сбрасывается аппаратно при обработке прерывания; IT1 – конфигурация прерывания INT1. При IT1 = 1 прерывание вызывается изменением 1/0, а при IT1 = 0 низким уровнем на входе INT1; IE0 – флаг обнаружения сигнала прерывания на входе внешнего прерывания INT0. Устанавливается аппаратно при обнаружении и сбрасывается аппаратно при обработке прерывания; IT0 – конфигурация прерывания INT0. При IT0 = 1 прерывание вызывается изменением 1/0, а при IT0 = 0 низким уровнем на входе INT0. 7. S0CON – побитно адресуемый регистр управления UART. SCON.7 SCON.6 SCON.5 SCON.4 SCON.3 SCON.2 SCON.1 SCON.0 SM0
SM1
SM2
REN
TB8 38
RB8
TI
RI
Назначение битов: SM0 – режим работы UART, бит 0 (см. табл. 2.1); SM1 – режим работы UART, бит 1 (см. табл. 2.1); SM2 – разрешение мультипроцессорного обмена в режимах 2 и 3. В этих режимах, если SM2 = 1, то флаг RI не устанавливается, если принятый девятый бит данных (RB8) равен 0. В режиме 1, если SM2 = 1, флаг RI не устанавливается, если не принят единичный стоп-бит. В режиме 0 SM2 = 0; REN – программное разрешение приема, если REN = 1, прием разрешен, если REN = 0, прием запрещен; TB8 – девятый бит, передаваемый в режимах 2 и 3. Управляется программно; RB8 – в режимах 2 и 3 это девятый бит принятых данных. В режиме 1, если SM2 = 0, то RB8 содержит принятый стоп-бит. В режиме 0 не используется; TI – флаг прерывания передатчика. Устанавливается аппаратно в конце передачи 8-го бита в режиме 0 или в начале передачи стопбита в остальных режимах. Должен быть сброшен программно; RI – флаг прерывания приемника. Устанавливается аппаратно в конце приема 8-го бита в режиме 0 или в середине приема стопбита в остальных режимах. Должен быть сброшен программно. SM0
SM1
Режим работы
Комментарий
0
0
0
Регистр сдвига. Скорость обмена – Fosc/12
0
1
1
8-битный приемопередатчик. Скорость обмена – переменная
1
0
2
9-битный приемопередатчик. Скорость обмена – Fosc/64 или Fosc/32
1
1
3
9-битный приемопередатчик. Скорость обмена – переменная
Замечание. В УЛС UART используется для реализации системных функций при организации обмена с инструментальной ЭВМ. 39
8. TMOD – регистр режимов таймеров-счетчиков Т0 и Т1. Побитно не адресуется. D7
D6
D5
D4
D3
D2
D1
D0
GATE
C/T
M1
M0
GATE
C/T
M1
M0
T1
T0
Назначение битов: GATE – при TRx = 1 (TCON) и GATE = 1 таймер Тх включен, если INTx = 1 (аппаратное разрешение работы). Если GATE = 0, то таймер Тх включен при TRx = 1 (программное управление через регистр TCON; C/T – выбор режима работы. При С/Т = 0 Тх работает как таймер от внешнего генератора, при С/Т = 1 таймер Тх работает как счетчик внешних событий по входу Тх; M1 – бит 1 кода выбора режима (см. табл. 2.2); M0 – бит 0 кода выбора режима (см. табл. 2.2).
М1
М0
Режим работы
Комментарий
0
0
0
13-разрядный таймер
0
1
1
16-разрядный таймер/счетчик событий
1
0
2
8-разрядный таймер/счетчик событий с автоматической перезагрузкой
1
1
3
Регистр TL0 таймера 0 работает как 8-разрядный таймер/счетчик событий под управлением битов таймера Т0. Регистр TН0 таймера 0 работает как 8-разрядный таймер событий под управлением битов таймера Т1. Таймер Т1 выключен.
40
9. PCON – регистр управления режимом энергопотребления. Побитно не адресуется.
D7 SMOD
D6
D5
D4
D3
D2
D1
D0
–
–
WLE
GF1
GF0
PD
IDL
Назначение битов: SMOD – бит разрешения удвоение скорости передачи UART. Если бит установлен, скорость удваивается и определяется таймером Т1. UART может использоваться в режимах 1, 2 и 3; WLE – бит разрешения загрузки сторожевого таймера Т3. Этот бит должен быть установлен программно перед его загрузкой. Сбрасывается аппаратно после загрузки Т3; GF1 – пользовательский флаг общего назначения; GF0 – пользовательский флаг общего назначения; PD – бит включения режима пониженного энергопотребления (отключение внутреннего генератора). Может быть установлен только если выключен сторожевой таймер Т3; IDL – бит включения режима приостанова.
2.3.ОРГАНИЗАЦИЯ ПРЕРЫВАНИЙ. ОСОБЕННОСТИ ИСПОЛЬЗОВАНИЯ ВНЕШНИХ ПРЕРЫВАНИЙ В УЛС В табл. 2.1 представлены адреса векторов каждого из 15 прерываний МК PCF80С552 включенного в составе УЛС. Все адреса находятся в области эмулятора ПЗУ и доступны пользователю для реализации обработки прерываний. Заметим, что таблица составлена с учетом переноса адресов векторов в область эмулятора ПЗУ, о чем говорилось в п. 1.6.
41
Таблица 2.1 Таблица векторов прерываний MK PCF80C552 в составе УЛС Источник прерывания
Обозначение
Адрес вектора
Внешнее прерывание INT0
X0
8003h
Переполнение таймера Т0
Т0
800Вh
Внешнее прерывание INT1
X1
8013h
Переполнение таймера Т1
Т1
801Вh
UART
S0
8023h
I2C
S1
802Bh
T2 регистр-защелка 0
Р
8033h
T2 регистр-защелка 1
CT1
803Bh
T2 регистр-защелка 2
CT2
8043h
T2 регистр-защелка 3
CT3
804Bh
АЦП
ADC
8053h
T2 компаратор 0
CM0
805Bh
T2 компаратор 1
CM1
8063h
T2 компаратор 2
CM2
806Bh
Переполнение T2
T2
8073h
Для того чтобы разрешить любое нужное прерывание, необходимо в регистре IEN0 установить бит EA=1, разрешив все прерывания, а затем в регистрах IEN0 и IEN1 выбрать и установить соответствующий бит индивидуального разрешения прерывания. В МК реализована двухуровневая система приоритетов прерываний. Каждому прерыванию при помощи программирования регистров IP0 и IP1 может быть присвоен низкий (0) или высокий (1) уровень приоритета. Обработка прерывания низкого уровня может быть прервана только прерыванием высокого уровня. Обработка прерывания высокого уровня не может быть прервана никаким другим прерыванием. При одновременном поступлении двух прерываний различного уровня приоритета предпочтение для обработки отдается прерыванию высокого уровня. При одновременном поступлении прерываний одного уровня порядок их обработки определяется табл. 2.2. 42
Таблица 2.2 Приоритеты прерываний в пределах одного уровня Источник прерывания
Обозначение
Приоритет в пределах одного уровня
Внешнее прерывание INT0
X0
Высший
I2C
S1
АЦП
ADC
Переполнение таймера Т0
T0
T2 регистр-защелка 0
CT0
T2 компаратор 0
CM0
Внешнее прерывание INT1
X1
T2 регистр-защелка 1
CT1
T2 компаратор 1
CM1
Переполнение таймера Т1
T1
T2 регистр-защелка 2
CT2
T2 компаратор 2
CM2
UART T2 регистр-защелка 3
Низший
S0 CT3
Переполнение таймера Т2
T2
Обратим внимание на особенности использования внешних прерываний INT0 и INT1. Каждое из них может быть сконфигурировано или по изменению 1/0 или низкому уровню сигнала. Если прерывание сконфигурировано по изменению 1/0, то для его захвата контроллером прерывания необходимо, чтобы длительность значений «1» и «0» сигнала прерывания была бы не меньше 12 периодов тактового генератора МК (одного процессорного цикла). В УЛС пользователь может использовать только одно внешнее прерывание INT0 для обмена с ПЛИС. При проектировании схемного узла ПЛИС для генерации прерывания, сконфигурированного по изменению 1/0, следует принять во внимание, что ПЛИС тактируется от того же внешнего генератора, что и МК. В качестве решения для формирования такого узла, может быть предложена схема выделения заданного количества периодов генератора, например 16. Напомним, что флаг прерывания IEx в этом случае сбрасывает43
ся программно при входе в обработчик прерывания. Если прерывание сконфигурировано по низкому уровню сигнала, то его длительность должна удовлетворять двум условиям. Во-первых, она должна быть достаточной для захвата сигнала контроллером прерываний. Во-вторых, к моменту окончания обработки прерывания низкий уровень сигнала должен быть сброшен, иначе последует повторная обработка прерывания. Эти условия реализуется таким способом обработки прерывания, когда низкое значение сигнала выставляется внешним устройством, а сбрасывается оно при выполнении специальной команды обработчика прерывания. В гл. 3 рассматриваются примеры реализации обмена ПЛИС и МК по внешнему прерыванию INT0. 2.4. РАБОТА С ПАРАЛЛЕЛЬНЫМИ ПОРТАМИ ВВОДА-ВЫВОДА. ОСОБЕННОСТИ ИХ ИСПОЛЬЗОВАНИЯ В УЛС В состав МК PCF80C552 входят шесть 8-разрядных портов ввода-вывода (Р0-Р5). Каждый разряд всех портов, кроме Р5, для возможности организации двунаправленного обмена в своем составе имеет защелку, входной буфер и выходной драйвер. Порт Р5 может использоваться только как входной. Табл. 2.3 иллюстрирует назначение портов МК с учетом их альтернативных функций. Таблица 2.3 Функции портов ввода-вывода ВЫВОД ПОРТА Р0.0 Р0.1 Р0.2 Р0.3 Р0.4 Р0.5 Р0.6 Р0.7 Р1.0 Р1.1 Р1.2
АЛЬТЕРНАТИВНАЯ ФУНКЦИЯ AD0 AD1 AD2 Мультиплексированные AD3 линии младшего байта AD4 адреса и данных при AD5 обращении к внешней AD6 памяти AD7 CT0I С вход регистра-защелки 0 CT1I С вход регистра-защелки 1 CT2I С вход регистра защелки 2 44
Продолжение табл. 2.3 ВЫВОД ПОРТА Р1.3 Р1.4 Р1.5 Р1.6 Р1.7 Р2.0 Р2.1 Р2.2 Р2.3 Р2.4 Р2.5 Р2.6 Р2.7 Р3.0 Р3.1 Р3.2 Р3.3 Р3.4 Р3.5 Р3.6 Р3.7 Р4.0 Р4.1 Р4.2 Р4.3 Р4.4 Р4.5 Р4.6 Р4.7 Р5.0 Р5.1 Р5.2 Р5.3 Р5.4 Р5.5 Р5.6 Р5.7
АЛЬТЕРНАТИВНАЯ ФУНКЦИЯ CT3I С вход регистра-защелки 3 T2 Вход таймера Т2 RT2 Сброс таймера Т2 SCL Линия синхронизации I2C SDA Линия данных I2C A0 A1 Старший байт адреса A2 при обращении к внешней A3 памяти данных и устройствам A4 ввода-вывода A5 A6 A7 RXD Вход приемника UART TXD Выход передатчика UART INT0 Внешнее прерывание 0 INT1 Внешнее прерывание 1 T0 Вход таймера 0 T1 Вход таймера 1 WR Строб записи RD Строб чтения CMSR0 Выходы компаратора CMSR1 таймера Т2 CMSR2 CMSR3 CMSR4 CMSR5 CMT0 CMT1 ADC0 ADC1 ADC2 ADC3 8 аналоговых входов ADC4 аналого-цифрового ADC5 преобразователя ADC6 ADC7 45
В УЛС порты Р0, Р2 и Р3 используются в альтернативном режиме для организации внешней шины и для пользователя недоступны. Вход таймера Т0 подключен к ПЛИС, а вход таймера Т1 к разъему расширения. Порт Р1 может использоваться только в альтернативном режиме для работы с JTAG-портом ПЛИС и организации последовательного интерфейса I2C. Линии порта 5 выведены на разъем расширения. Порт Р4 подключен к ПЛИС и одновременно к шкалам светодиодных индикаторов А и В. Если предусмотрен вывод информации из МК через порт Р4 на шкалы А и В, то в проекте, загружаемом в ПЛИС, эти шкалы не должны использоваться. В альтернативном режиме порт Р4 может использоваться для формирования временных интервалов при помощи таймера 2. 2.5. ТАЙМЕР Т2 В состав МК входит дополнительный 16-разрядный таймер Т2, который обеспечивает аппаратную поддержку формирования и измерения временных интервалов. Для этой цели в его состав введены три 16-разрядных компаратора и четыре 16-разрядные регистры-защелки. На рис. 2.5 представлена структурная схема таймера Т2. Для работы с таймером Т2, помимо рассмотренных ранее IEN1 IP1, используются следующие регистры специальных функций: TML2(ECh) и TMH2(EDh) – 16-разрядный счетчик таймера Т2; CML0(A9h),CMH0(C9h), CML1(AAh),CMH1(CAh), СML2(ABh),CMH2(CBh) – компараторы; CTL0(ACh), CTH0(CCh), CTL1(ADh), CTH1(CDh), CTL2(AEh), CTH2(CEh), CTL3(AFh), CTH3(CFh) – регистры-защелки; TM2CON(EAh) – регистр управления таймером Т2; TM2IR(C8h) – регистр флагов прерывания таймера Т2; CTCON(EBh) – регистр управления регистрами-защелками таймера Т2; STE(EEh) – регистр разрешения установки линий порта Р4; RTE(EFh) – регистр разрешения сброса/переключения линий порта Р4. 46
Рис. 2.5. Структурная схема таймера Т2
Рассмотрим назначение этих регистров. 1. TM2CON – регистр управления таймером Т2. Побитно не адресуем. D7
D6
D5
D4
D3
D2
D1
D0
T2IS1
T2IS0
T2ER
T2BO
T2P1
T2P0
T2MS1
T2MS0
Назначение битов: T2IS1 – бит выбора прерывания по 16-разрядному переполнению таймера Т2; T2IS0 – бит выбора прерывания по 8-разрядному переполнению таймера Т2; 47
T2ER – бит разрешения внешнего сброса таймера Т2. При его установке таймер Т2 может сбрасываться перепадом 0/1 на входе RT2 (Р1.5); T2BO – флаг прерывания по байтовому переполнению таймера Т2; T2P1 – бит 1 выбор коэффициента деления частоты предделителем таймера Т2; T2P0 – бит 0 выбор коэффициента деления частоты предделителем таймера Т2; T2P1
T2P0
0
0
Частота источника тактирования (Fosc/12 или от внешнего входа Т2 (Р1.4)
Частота работы таймера Т2
0
1
Частота источника тактирования, деленная на 2
1
0
Частота источника тактирования, деленная на 4
1
1
Частота источника тактирования, деленная на 8
T2MS1 – бит 1 выбора режима таймера Т2; T2MS0 – бит 0 выбора режима таймера Т2; T2MS1
T2MS0
Режим работы таймера Т2
0
0
Таймер Т2 выключен
0
1
Источник тактирования Fosc/12
1
0
Не используется
1
1
Источник тактирования - сигнал со входа Т2
2. TM2IR – побитно адресуемый регистр флагов прерывания таймера Т2. D7
D6
D5
D4
D3
D2
D1
D0
T2OV
CMI2
CMI1
CMI0
CTI3
CTI2
CTI1
CTI0
Назначение битов: T2OV – флаг 16-разрядного переполнения таймера Т2; CMI2 – флаг прерывания СМ2; 48
CMI1 – флаг прерывания СМ1; CMI0 – флаг прерывания СМ0; CTI3 – флаг прерывания СТ3; CTI2 – флаг прерывания СТ2; CTI1 – флаг прерывания СТ1; CTI0 – флаг прерывания СТ0; 3. CTCON – регистр управления регистрами-защелками таймера Т2. D7
D6
D5
D4
D3
D2
D1
D0
CTN3
CTP3
CTN2
CTP2
CTN1
CTP1
CTN0
CTP0
Назначение битов: CTN3 – регистр-защелка СТ3 переключается перепадом 1/0 на входе CT3I (P1.3); CTP3 – регистр-защелка СТ3 переключается перепадом 0/1 на входе CT3I (P1.3); CTN2 – регистр-защелка СТ2 переключается перепадом 1/0 на входе CT2I (P1.2); CTP2 – регистр-защелка СТ2 переключается перепадом 0/1 на входе CT2I (P1.2); CTN1 – регистр-защелка СТ1 переключается перепадом 1/0 на входе CT1I (P1.1); CTP1 – регистр-защелка СТ1 переключается перепадом 0/1 на входе CT1I (P1.1); CTN0 – регистр-защелка СТ0 переключается перепадом 1/0 на входе CT0I (P1.0); CTP0 – регистр-защелка СТ0 переключается перепадом 0/1 на входе CT0I (P1.0). 4. RTE – регистр разрешения сброса/переключения линий порта Р4. D7
D6
D5
D4
D3
D2
D1
D0
TP47
TP46
RP45
RP44
RP43
RP42
RP41
RP40
49
Назначение битов: TP47 – если TP47=1, то линия порта Р4.7 переключается при равенстве значений компаратора СМ2 и счетчика таймера Т2; TP46 – если TP46=1, то линия порта Р4.6 переключается при равенстве значений компаратора СМ2 и счетчика таймера Т2; RP45 – если RP45=1, то линия порта Р4.5 сбрасывается в 0 при равенстве значений компаратора СМ1 и счетчика таймера Т2; RP44 – если RP44=1, то линия порта Р4.4 сбрасывается в 0 при равенстве значений компаратора СМ1 и счетчика таймера Т2; RP43 – если RP43=1, то линия порта Р4.3 сбрасывается в 0 при равенстве значений компаратора СМ1 и счетчика таймера Т2; RP42 – если RP42=1, то линия порта Р4.2 сбрасывается в 0 при равенстве значений компаратора СМ1 и счетчика таймера Т2; RP41 – если RP41=1, то линия порта Р4.1 сбрасывается в 0 при равенстве значений компаратора СМ1 и счетчика таймера Т2; RP40 – если RP40=1, то линия порта Р4.0 сбрасывается в 0 при равенстве значений компаратора СМ1 и счетчика таймера Т2; 5. STE – регистр разрешения установки линий порта Р4. D7
D6
D5
D4
D3
D2
D1
D0
TG47
TG46
SP45
SP44
SP43
SP42
SP41
SP40
Назначение битов: TG47 – переключение триггеров; TG46 – переключение триггеров; SP45 – если SP45=1, то линия порта Р4.5 устанавливается в 1 при равенстве значений компаратора СМ0 и счетчика таймера Т2; SP44 – если SP44=1, то линия порта Р4.4 устанавливается в 1 при равенстве значений компаратора СМ0 и счетчика таймера Т2; SP43 – если SP43=1, то линия порта Р4.3 устанавливается в 1 при равенстве значений компаратора СМ0 и счетчика таймера Т2; SP42 – если SP42=1, то линия порта Р4.2 устанавливается в 1 при равенстве значений компаратора СМ0 и счетчика таймера Т2; SP41 – если SP41=1, то линия порта Р4.1 устанавливается в 1 при равенстве значений компаратора СМ0 и счетчика таймера Т2; SP40 – если SP40=1, то линия порта Р4.0 устанавливается в 1 при равенстве значений компаратора СМ0 и счетчика таймера Т2. 50
Рассмотрим принцип действия таймера Т2. 16-разрядный счетчик через предделитель подключается к одному из двух возможных источников счетных сигналов – внутреннему Fosc/12 или внешнему от входа Т2 (перепад 1/0) с максимальной частотой, соответствующей одному переключению за один процессорный цикл. Выбор источника сигнала и задание коэффициента деления предделителя осуществляется программно при помощи регистра TM2CON. Регистры TML2 и TMH2 можно читать «на лету». Это необходимо делать таким образом, чтобы исключить неправильную интерпретацию считанного значения из-за неодновременного чтения регистров. Запись в регистры TML2 и TMH2 невозможна. Они могут только сбрасываться в 0 сигналом общего сброса или перепадом 1/0 на входе RT2(P1.5) при установленном бите T2ER (TM2CON.5). Установленный коэффициент деления предделителя сбрасывается при сбросе таймера Т2 или при переключении источника счетных сигналов. Возможны прерывания при 8- или 16-разрядном переполнении счетчика таймера Т2. Особенность их реализации состоит в том, что им соответствует только один адрес вектора прерывания (8073h). Источник прерывания должен определять сам обработчик прерывания, анализируя флаги T2BO и T2OV. При этом следует учитывать, что установка флага T2OV автоматически вызывает и установку флага T2BO. Флаги переполнения должны сбрасываться программно. При необходимости можно разрешить прерывание сразу по двум возможным вариантам переполнения счетчика таймера Т2. В этом случае в обработчике прерывания надо сбрасывать флаг именно того переполнения, которое прерывание вызвало. Рассмотрим возможности таймера Т2 по формированию программно управляемых временных интервалов на линиях порта Р4. При работе счетчика таймера Т2 его содержимое сравнивается со значениями регистров компараторов СМ0, СМ1 и СМ2. Когда фиксируется совпадение значений, в регистре TM2IR устанавливаются соответствующие флаги прерываний. Если зафиксировано совпадение с СМ0, то могут быть установлены в 1 линии 0-5 порта Р4, если установлены соответствующие биты разрешения в регистре STE. Если зафиксировано совпадение с СМ1, то могут быть сброшены в 0 линии 0-5 порта Р4, если установлены соответствующие биты разрешения в регистре RTE. Если RTE = 0, порт Р4 не реаги51
рует на результат сравнения счетчика таймера Т2 и компараторов СМ1 и СМ2. Если зафиксировано совпадение с СМ2, то могут быть переключены в противоположное состояние линии 6–7 порта Р4, если установлены соответствующие биты разрешения в регистре RTE. Причем основные триггеры-защелки линий Р4.6 и Р4.7 сохраняют свое значение, а переключаются дополнительные триггерызащелки. Таким образом, если при работе с этими линиями порта Р4 в данном режиме происходит их установка, то в следующий раз (после очередного совпадения СМ2 и счетчика таймера Т2), последует их сброс. Это произойдет, даже если до этого был проведен программный сброс этих линий. После прохождения сигнала «СБРОС» первое переключение устанавливает триггеры-защелки порта Р4 в единичное состояние. Содержимому триггеров-защелок линий 6 и 7 порта Р4 соответствуют только читаемые биты TG46 и TG47 в регистре STE. Их единичное значение свидетельствует о том, что следующее состояние триггера-защелки будет 1, и 0 в противном случае. Регистры компараторов СМ0, СМ1 и СМ2 сбрасываются в 0 сигналом «СБРОС». Каждая линия порта Р4 может устанавливаться/сбрасываться программно в любой момент времени. Однако аппаратная установка этих линий по результатам работы компараторов таймера Т2 имеет преимущество. Если по результатам работы компаратора требуется одновременная установка в 1 и сброс в 0, то предпочтение отдается последнему. Покажем возможности таймера Т2 при измерении временных интервалов. В его состав входят четыре 16-разрядных регистразащелки СТ0, СТ1, СТ2 и СТ3, в которые может загружаться значение счетчика таймера Т2 с приходом входных сигналов CT0I, CT1I, CT2I и CT3I (линии порта Р1.0 – Р1.3). Одновременно с загрузкой данных регистров устанавливаются флаги прерываний в регистре TM2IR. Загрузка может быть разрешена по изменениям на входах 0/1 или 1/0, а также по обоим одновременно. Очевидно, что регистры-защелки позволяют измерять временные интервалы между событиями, связанными с изменениями входных сигналов CT0I, CT1I, CT2I и CT3I. Действительно, с приходом очередного события вызывается разрешенное прерывание, обработчик которого определяет промежуток времени между текущим и предыдущим 52
событиями, анализируя состояния соответствующих регистровзащелок. Отметим следующие особенности использования таймера Т2 в УЛС. Ввиду того, что линии порта Р1 используются только для работы с JTAG портом ПЛИС, в УЛС таймер Т2 МК может использоваться только в режиме тактирования от внутреннего генератора, а внешнее тактирование и сброс невозможны. Работа с регистрамизащелками также недоступна. 2.6. СТОРОЖЕВОЙ ТАЙМЕР Т3 На рис. 2.6 представлена структурная схема сторожевого таймера Т3. В его состав входят 11-разрядный делитель частоты и 8-разрядный счетчик. Ему соответствует регистр специальных функций Т3 (FFh). Через этот регистр осуществляется загрузка и чтение таймера Т3 из МК. Включается и выключается Т3 только аппаратно входным сигналом EW. В УЛС этот вход Т3 соединен с размещенным тумблером на лицевой панели тумблером. Для загрузки Т3 необходимо выполнить два действия. Во-первых, необходимо разрешить загрузку Т3, установив в «1» бит PCON.4 (WLE). Во-вторых, осуществить последующую запись в регистр специальных функций Т3 необходимого значения. При этом автоматически сбрасывается бит WLE, запрещая случайную
Рис. 2.6. Структурная схема сторожевого таймераТ3 53
перезагрузку Т3 при «зависании» пользовательской программы, делитель частоты при этом также переводится в исходное нулевое состояние. Сторожевой таймер Т3 предназначен для автоматического сброса МК в исходное состояние (на адрес 0000h) при сбое в работе программного обеспечения, которое выражается в нарушении времени возврата к выполнению фрагмента кода, перезагружающего этот таймер. Таким образом, в корректно работающей программе таймер Т3 постоянно перезагружается в течение интервала времени более короткого по сравнению со «сторожевым» интервалом. Таймер Т3 вырабатывает сигнал «СБРОС» при переполнении (значение в его 8-разрядном счетчике FFh), поэтому при его использовании важно правильно рассчитать значение, которое записывается в счетчик при перезагрузке и определяет «сторожевой» интервал. Расчет проводится путем оценки времени выполнения отдельных модулей исполняемой программы. Такая оценка без труда может быть выполнена при помощи стандартных отладочных средств (dScope, например). Приведем значения минимального и максимального «сторожевых» интервалов времени для таймера Т3 в УЛС. Минимальное время соответствует коду FFh, перезагружаемому в регистр Т3, и составляет: Tmin = 2048×12×1/Fosc. В УЛС Fosc = 11,059 МГц, поэтому Tmin = 2,2 мс. Максимальное время соответствует коду 00h, перезагружаемому в регистр Т3, и составляет: Tmax = 256×2048×12×1/Fosc = 570 мс. 2.7. АНАЛОГО-ЦИФРОВОЙ ПРЕОБРАЗОВАТЕЛЬ В состав МК PCF80C552 входит 8-канальный 10-разрядный аналого-цифровой преобразователь (АЦП). Он построен по классической схеме поразрядного уравновешивания на основе регистра последовательных приближений и цифро-аналогового преобразователя (ЦАП). Время одного преобразования составляет 50 процессорных циклов. Для работы с АЦП имеются два регистра специальных функций. В регистре ADCH формируются 8 старших разрядов результата преобразования (разряды с 9 по 2). Рассмотрим назначение разрядов регистра управления АЦП ADCON. 54
D7
D6
ADC.1 ADC.0
D5 ADEX
D4 ADCI
D3 ADCS
D2
D1
D0
AADR2 AADR1 AADR0
Назначение битов: ADC.1 – разряд 1 результата преобразования; ADC.0 – разряд 0 результата преобразования; ADEX – бит разрешения аппаратного запуска преобразования перепадом 0/1 сигнала STADC. При ADEX = 0 возможен только программный запуск АЦП установкой бита ADCS. При ADEX = 1 возможен как программный, так и аппаратный запуск; ADCI – флаг прерывания от АЦП. Этот флаг устанавливается после завершения преобразования, когда его результат может быть считан. Прерывание вызывается, если оно разрешено. Флаг может быть сброшен программно при обработке прерывания. Программно установлен быть не может. Пока этот флаг установлен, новое преобразование не может быть запущено; ADCS – бит старта и состояния АЦП. Установка этого бита запускает АЦП. Устанавливается программно или аппаратно сигналом STADC. Во время выполнения преобразования ADCS = 1, что свидетельствует о том, что АЦП «занят». После окончания преобразования ADCS сбрасывается в «0» одновременно с установкой флага прерывания ADCI. ADCS не может быть сброшен программно. Новое преобразование не может быть запущено, если ADCI или ADCS установлены в «1». ADCI
ADCS
0
0
АЦП свободен, преобразование может быть запущено
Состояние АЦП
0
1
АЦП занят, запуск преобразования не возможен
1
0
Преобразование завершено, запуск преобразования не возможен
1
1
Не используется
55
AADR2 – разряд 2 адреса аналогового канала, подключаемого к АЦП; AADR1 – разряд 1 адреса аналогового канала, подключаемого к АЦП; AADR0 – разряд 0 адреса аналогового канала, подключаемого к АЦП.
AADR2
AADR1
AADR0
Аналоговый вход
0
0
0
Р5.0
0
0
1
Р5.1
0
1
0
Р5.2
0
1
1
Р5.3
1
0
0
Р5.4
1
0
1
Р5.5
1
1
0
Р5.6
1
1
1
Р5.7
Биты AADR2, AADR1 и AADR0 могут изменяться только при ADCI = 0 и ADCS = 0. При использовании аппаратного запуска по перепаду 0/1 внешнего сигнала STADC необходимо обеспечить формирование длительности следующих друг за другом его состояний «0» и «1» не менее длительности одного процессорного цикла. В УЛС все восемь линий порта Р5 и сигнал STADC выведены на разъем расширения. Максимальное значение измеряемого напряжения составляет +2.5 В. Очевидно, что использование АЦП возможно только при подключении к стенду дополнительных устройств. В этом случае для получения корректных результатов необходимо ознакомиться с соответствующей документацией на это вспомогательное оборудование УЛС.
56
2.8. ШИРОТНО-ИМПУЛЬСНЫЙ МОДУЛЯТОР В состав МК входит двухканальный широтно-импульсный модулятор (ШИМ), выходами которого являются линии PWM0 и PWM1. Эти сигналы выводятся на разъем расширения. Как правило, ШИМ используется для управления двигателями постоянного тока. На рис. 2.7 приведена структурная схема ШИМ.
Рис. 2.7. Структурная схема ШИМ
Два канала ШИМ формируют импульсы с программно управляемыми длительностью и периодом следования. Период следования импульсов определяется делителем частоты (регистр PWMP), который совместно с 8-разрядным счетчиком по модулю 255 является общим сразу для двух каналов. Делитель частоты тактируется сигналом с частотой Fosc/2. Делитель частоты программно управляется регистром PWMP, который определяет коэффициент деления, равный 1+PWMP. Частота следования импульсов на выходе ШИМ: Fpwm = Fosc/[2×(1+PWMP)×255]; где PWMP – содержимое одноименного регистра. Содержимое счетчика сравнивается со значениями регистров PWM0 и PWM1. Пока содержимое этих регистров больше содер57
жимого счетчика, выходы ШИМ (выходные линии PWM0 и PWM1) находятся в нулевом состоянии. При значении регистра, меньшем или равном значению счетчика, на выходе устанавливается единичное значение. Таким образом, изменяя содержимое регистров PWM0 и PWM1, можно управлять скважностью формируемых ШИМ импульсных последовательностей. Отношение длительности нулевого уровня к длительности единичного уровня сигнала на выходе ШИМ определяется соотношением: PWMx/(255-PWMx), где PWMx – содержимое одноименного регистра. Загрузка кодов 00h и FFh в регистры PWM0 и PWM1 устанавливает на выходах этих каналов соответственно постоянные единичное и нулевое значения.
58
3. ТИПОВЫЕ ЗАДАЧИ ПРОЕКТИРОВАНИЯ КОМПОНЕНТОВ ВСТРАИВАЕМЫХ СИСТЕМ НА ОСНОВЕ УЛС 3.1. ОБЩИЕ ПРИНЦИПЫ ОРГАНИЗАЦИИ ПРОГРАММНОГО ОБМЕНА МК С УСТРОЙСТВОМ НА ПЛИС. ЦИКЛЫ ВНЕШНЕЙ ШИНЫ МК. Программный обмен с внешними устройствами выполняется МК при помощи команд: MOVX @DPTR,A – запись по адресу, определяемому значением регистра указателя DPTR, MOVX A,@DPTR – чтения. В этом случае МК автоматически выполняет цикл внешней шины для обращения к пространству внешней памяти данных. Для организации программного обмена МК с ПЛИС используются адреса 7FFA и 7FFB. Каждому из этих адресов в устройстве на ПЛИС должны быть сопоставлены регистры (при записи) или произвольные сигналы устройства (при чтении). Для корректной реализации программного обмена с ПЛИС необходимо руководствоваться временными соотношениями сигналов внешней шины. Цикл шины для программного обмена с ПЛИС реализуется при помощи следующих сигналов: DMK – шина данных, 7FFA и 7FFB – адреса и MKRD и MKWR – стробы чтения и записи. Указанные сигналы подаются из МК в ПЛИС. Рассмотрим способы подключения регистров устройства на ПЛИС при выполнении команды записи. На рис. 3.1 приведена временная диаграмма цикла внешней шины МК при выполнении следующей последовательности команд: MOVDPTR,#7FFAh MOVA,#05h MOVX@DPTR,A Из временной диаграммы видно, что запись в регистр устройства на ПЛИС может осуществляться как по переднему, так и по заднему фронту сигнала строба MKWR. Два возможных способа подключения регистров для записи в них данных из МК, показаны на рис. 3.2. 59
Рис. 3.1. Цикл внешней шины при записи в ПЛИС
Рис. 3.2. Два варианта подключения регистров
При выполнении чтения из внешнего устройства результат фиксируется в МК по заднему фронту строба MKRD. При выполнении чтения из ПЛИС в состав устройства должен быть введен управляемый выходной буфер. Его назначение состоит в том, чтобы 60
подключать источники сигналов ПЛИС к внешней шине МК только при чтении по выделенным для ПЛИС адресам. На рис. 3.3 показана временная диаграмма цикла внешней шины МК при выполнении следующей последовательности команд: MOVDPTR,#7FFBh MOVXA,@DPTR
Рис. 3.3. Цикл внешней шины при чтении из ПЛИС
На рис. 3.4 приведен вариант схемы для чтения по двум выделенным для ПЛИС адресам. В схеме используются буферные элементы с сигналами управления низкого и высокого уровня. На элементах BUFT8 и BUFE8 реализован мультиплексор шины данных для выбора одного из двух возможных источников.
Рис. 3.4. Вариант схемы для чтения данных из ПЛИС 61
3.2. ОРГАНИЗАЦИЯ ОБМЕНА ПО ПРЕРЫВАНИЯМ МЕЖДУ МК И УСТРОЙСТВОМ НА ПЛИС Одним из способов организации обмена данными МК с внешними устройствами, является использование прерываний. Такую возможность можно реализовать для обмена данными МК с устройством, реализованным на ПЛИС. Как уже говорилось, в УЛС пользователю доступно для этих целей только одно внешнее прерывание INT0. Это прерывание может быть сконфигурировано либо по низкому уровню (активное значение – «0»), либо по перепаду 1/0. Напомним, что флаг IE0 в обоих случаях устанавливается аппаратно, а сбрасывается аппаратно только при конфигурировании прерывания по изменению 1/0 (при входе в обработчик прерывания). При конфигурировании по уровню обработчик прерывания должен сформировать воздействие на источник прерывания с тем, чтобы его запрос был снят и, соответственно, сброшен флаг IE0, до момента выхода из обработчика. Проиллюстрируем эти способы работы с прерыванием INT0. Рассмотрим пример, в котором INT0 сконфигурировано по низкому уровню. На рис. 3.5 показана схема, которая вырабатывает сигнал прерывания INT0 c активным низким уровнем.
Рис. 3.5. Схема генерации внешнего прерывания по низкому уровню сигнала INT0 62
При нажатии кнопки ГОИ2 триггер, который собственно и является источником сигнала прерывания устанавливается в исходное состояние «0». На линии INT0 устанавливается пассивное значение «1». При нажатии кнопки ГОИ1 триггер переключается в состояние «1», а на линии INT0 устанавливается активный уровень «0». Если прерывание INT0 разрешено, то в МК управление передается подпрограмме обработки прерывания. Пример текста обработчика внешнего прерывания по низкому уровню сигнала INT0: ORG 8000H LJMP M1 ;----------------------------------------------------------------------------------------------ORG 8003H ;обработчик прерывания INT0 INC R0 MOV R1,#00H M3: INC R1 CLR TR0 ;выключение таймера CLR TF0 ;сброс флага переполнения таймера Т0 MOV TL0,#00H MOV TH0,#00H MOV TMOD,#00H ;таймер T0 режим 0 SETB TR0 ;включение таймера M2: JNB TF0,M2 CJNE R1,#0FFH,M3 MOV DPTR,#7FFAH MOVX @DPTR,A ; сброс триггера MOV A,R0 SWAP A MOV 0C0H,A ;вывод счетчика в порт Р4 RETI ;---------------------------------------------------------------------------------------------M1: MOV IE,#81H ;разрешение прерывания INT0 MOV TCON,#00H ;конфигурирование прерывания INT0 ;низкому уровню MOV R0,#00H LJMP $ END
Для сброса активного низкого значения сигнала прерывания в схеме применяются элементы для сброса триггера в нулевое состояние при выполнении обработчиком команды записи по адресу 7FFAh. Кроме этого, в обработчике реализован программный счет63
чик на регистре R0, содержимое которого выводится для индикации в порт Р4 (светодиодные шкалы А и В). С использованием таймера Т0 реализовано формирование задержки длительностью, достаточной для наблюдения в третьем разряде светодиодной шкалы С появления и сброса сигнала прерывания. Проанализируем второй способ работы с прерыванием INT0. Для этого рассмотрим схему, приведенную на рис. 3.6.
Рис. 3.6. Схема генерации внешнего прерывания по изменению 1/0 сигнала INT0
На рис. 3.7 приведена временная диаграмма ее работы. Из диаграммы видно, что данная схема при нажатии кнопки ГОИ2 на линии INT0 генерирует сигнал низкого уровня в течение 16 периодов генератора тактовых сигналов. Следует заметить, что при этом генератор ГОИ1 должен работать в непрерывном режиме. Тем самым выполняется требование по длительности сигнала прерывания, которая должна быть не менее 12 периодов. Для установки схемы в исходное состояние используется разряд 0 клавишного регистра Р1.
64
Рис. 3.7. Временная диаграмма схема генерации внешнего прерывания по изменению 1/0 сигнала INT0
Ниже приведен текст обработчика прерывания по изменению 1/0 сигнала INT0: ORG8000H LJMP M1 ;-------------------------------------------------------------------------------------------------ORG 8003H ;обработчик прерывания INT0 INC R0 MOV R1,#00H M3: INC R1 CLR TR0 ;выключение таймера CLR TF0 ;сброс флага переполнения таймера Т0 MOV TL0,#00H MOV TH0,#00H MOV TMOD,#00H ;таймер T0 режим 0 SETB TR0 ;включение таймера M2: JNB TF0,M2 CJNE R1,#0FFH,M3 MOV A,R0 MOV 0C0H,A ; вывод счетчика в порт Р4 RETI ;------------------------------------------------------------------------------------------------M1: MOV IE,#81H ;разрешение прерывания INT0 MOV TCON,#00H ;конфигурирование прерывания INT0 по ;низкому уровню MOV R0,#00H LJMP $ END 65
Отличие от предыдущей программы состоит в том, что из программы удалены команды для выполнения записи по адресу 7FFAh и переконфигурировано прерывание INT0. Как и в предыдущем случае, на индикацию выводятся сигнал прерывания и программный счетчик, реализуемый обработчиком. Но в этом случае из-за того, что сигнал прерывания имеет длительность 1,5 мкс, визуальному наблюдению он не поддается. Зато вывод на индикацию состояния программно формируемого счетчика на регистре R0 осуществляется с заметной задержкой, формируемой, как и прежде, на таймере Т0. 3.3. ОРГАНИЗАЦИЯ ПРОГРАММНОГО ОБМЕНА ПО ФЛАГУ ГОТОВНОСТИ ВНЕШНЕГО УСТРОЙСТВА Данный тип обмена поясним на примере выполнения чтения данных из устройства, реализованного на ПЛИС. Рассмотрим случай, когда устройство на ПЛИС подключено к внешней шине МК. Положим, что МК только читает данные из ПЛИС. При программном обмене необходимо использовать флаг готовности данных для чтения в МК. Этот флаг автоматически устанавливается устройством при наличии готовых данных и сбрасывается после их чтения в МК. Очередные данные могут быть считаны в МК, если установлен флаг их готовности. Таким образом, перед чтением данных необходимо дождаться появления флага готовности. Очередные данные могут быть выставлены устройством, если этот флаг сброшен. Эти условия обеспечивают целостность передаваемых данных. В этом случае ни одна посылка данных не может быть потеряна. Так как обмен идет через внешнюю шину МК, и читаться должны не только данные, но и флаг их готовности, то при организации обмена необходимо задействовать две адресные линии, подключенные к ПЛИС. Выделим адрес 7FFAh для чтения флага готовности данных, а адрес 7FFBh для чтения самих данных. Флаг готовности, читаемый в МК, будет отображаться в разряде D0 шины данных. Рассмотрим организацию программного обмена по флагу готовности на примере следующей схемы, изображенной на рис. 3.8. 66
Рис. 3.8. Схема для реализации программного обмена по флагу готовности
Схема содержит 8-разрядный буферный регистр, куда внешнее устройство помещает данные для чтения в МК (шина INT_WE[7-0] и сигнал разрешения записи INT_WE) и триггер флага готовности. Для обеспечения условия корректности передачи данных, флаг должен быть доступен для проверки как со стороны МК, так и внешнего устройства. Так как для сброса триггера используется асинхронное управление, то логика анализа флага во внешнем устройстве должна учитывать не только состояние триггера, а и сигнала чтения RD_RG на его входе CLR. Это связано с тем, что сигнал чтения MKRD, формируемый МК, имеет минимальную длительность в 5 периодов тактового генератора, в течение которых флаг удерживается в сброшенном состоянии, что в принципе может разрешать внешнему устройству записывать новые данные, когда предыдущие еще несчитаны. Если этого не сделать, то к моменту снятия сигнала MKRD устройство может записать в буферный регистр несколько посылок данных. МК при этом считает 67
только последнюю из них, так как фиксация считанных в МК данных осуществляется при изменении 0/1 сигнала MKRD. Временная диаграмма, иллюстрирующая работу данной схемы при чтении данных, приведена на рис. 3.9. В начальном состоянии флаг готовности INT_WEFL сброшен, что разрешает запись в буферный регистр. После установки сигнала (INT_WE) и с приходом тактового импульса по линии CLK осуществляются запись значения 01010110b в буферный регистр и установка флага готовности данных для чтения в МК. При выполнении команды чтения по адресу 7FFAh (сигналы низкого уровня по линиям X7FFA и MKRD) этот флаг передается в МК (состояние шины OUT7 – XXXXXXX1b, то есть в младшем разряде шины данных D0 фиксируется значение «1»). После этого МК выполняет чтение данных (сигналы низкого уровня по линиям X7FFВ и MKRD), при котором состояние шины OUT7 - 01010110b. Из диаграммы видно, что сразу после снятия сигнала MKRD устанавливается флаг готовности INT_WEFL. Действительно, при выполнении команды чтения по адресу 7FFAh в младшем разряде шины данных D0 фиксируется значение «0» (состояние шины OUT7 – XXXXXXX0b).
Рис. 3.9. Временная диаграмма реализации программного обмена по флагу готовности 68
Сброс флага свидетельствует об отсутствии новых данных в буферном регистре внешнего устройства. Ниже приведен текст программы для приема из внешнего устройства блока данных из 32 байт и записи его в массив во внутренней памяти данных с адреса 80h. После завершения приема блока программа выводит в порт Р4 контрольный код 33: ORG 8000h MOV M2: INC MOV M1: MOVX ANL JZ MOV MOVX MOV CJNE MOV END
R0,#7Fh R0 DPTR,#7FFAh A,@DPTR A,#01h M1 DPTR,#7FFBh A,@DPTR @R0,A R0,#9Fh,M2 0C0h,#33h
;указатель массива ;чтение флага ;выделение маской разряда D0 ;ожидание флага ;чтение данных ;запись данных в массив ;контроль длины блока ;данных ;вывод контрольного кода
3.4. ОРГАНИЗАЦИЯ ПРОГРАММНОГО ОБМЕНА С ИСПОЛЬЗОВАНИЕМ БУФЕРА FIFO Данный вид обмена используется для передачи данных между устройствами, которые работают с различной скоростью. Одно из устройств записывает данные, а другое читает их в том же порядке, в каком они были записаны. При записи в FIFO анализируется флаг FULL (буфер заполнен). Если этот флаг установлен, то это говорит о заполненности буфера и невозможности помещения в него очередных данных. В этом случае следует дождаться сброса этого флага после очередного чтения. Если емкость буфера FIFO выбрана правильно, то такая необходимость возникает достаточно редко. В этом случае проявляется преимущество FIFO, которое состоит в том, что после записи каждой новой порции данных проверяется только флаг FULL, и нет необходимости каждый раз дожидаться флага, свидетельствующего об извлечении из буфера данных читающим устройством. Аналогичная ситуация возникает при чтении данных. Чтение возможно, только если сброшен флаг EMPTY (буфер пустой). 69
Рассмотрим пример организации обмена через FIFO, Когда осуществляется передача данных из устройства, выполненного на ПЛИС, в МК. Будем использовать буфер синхронного FIFO емкостью 16 восьмиразрядных слов. Управление буфером осуществляется сигналами RESET – синхронного сброса, RE – разрешения чтения и WE – разрешения записи. Выполнение данных операций осуществляется по изменению 0/1 синхросигнала. FIFO построено с использованием двухпортового ОЗУ, и допускает одновременное выполнение записи и чтения. На рис. 3.10 дана схема реализации обмена через FIFO, в которой показаны все необходимые элементы для чтения данных в МК. В схеме используются два адресных сигнала: X7FFВ – для чтения состояния флага EMPTY (разряд D0 шины данных МК) и X7FFА – для чтения данных из FIFO, а также сигнал чтения MKRD.
Рис. 3.10. Схема реализации обмена через FIFO
В данной схеме для обеспечения обмена FIFO и МК через внешнюю шину последнего используется схема выделения полного периода на двухразрядном счетчике и 8-разрядный буферный регистр. Это связано со следующими особенностями работы FIFO. Во-первых, запись и чтение выполняются синхронно по изменению 0/1 синхросигнала, если установлены сигналы разрешения WE и RE соответственно. Минимальная длительность строба чтения 70
MKRD составляет 5 тактов. Поэтому использовать этот строб для непосредственного формирования сигнала RE недопустимо. Для выполнения чтения необходимо в стробе MKRD «вырезать» только один период сигнала синхронизации. Эту функцию как раз и выполняет схема на счетчике. Во-вторых, необходимо учитывать особенности формирования состояния выходной шины FIFO. Для уяснения принципа работы выходной шины FIFO рассмотрим временную диаграмму, изображенную на рис. 3.11.
Рис. 3.11. Временная диаграмма работы FIFO при чтении данных
Из диаграммы видно, что при записи очередных данных, они появляются на выходной шине FIFO (RG.D7) через один такт. Также и при чтении – через один такт на выходной шине выставляются данные, которые будут считаны при следующем обращении. Напомним, что длительность строба чтения MKRD составляет 5 тактов, а результат чтения данных в МК фиксируется по изменению 0/1 этого строба. Ясно, что возможна ситуация, когда в момент изменения 0/1 MKRD на выходе FIFO будут уже следующие данные. Чтобы избежать такой ситуации, в схему введен буферный регистр, в котором фиксируются данные, читаемые из FIFO в момент действия сигнала RE. На диаграмме воспроизведена ситуация, когда в FIFO записаны два значения 34h и 29h. Из диаграммы видно, что после первой записи флаг EMPTY сбрасывается в «0», а после последнего чтения устанавливается в «1». На рис. 3.12 приведена временная диаграмма, на которой показано формирование флага FULL при заполнении буфера. Из диаграммы видно, что после сброса буфера в исходное состояние осуществляется последовательная запись 16-значений (16 тактовых 71
сигналов при установленном сигнале WE). В момент записи последнего значения устанавливается флаг FULL, что свидетельствует о заполненности буфера. Отметим, что FIFO можно использовать и для организации обмена по прерываниям, когда источником прерывания от внешнего устройства является флаг FULL. Это эффективный механизм обмена, если требуется передача блока данных, длина которого равна емкости FIFO.
Рис. 3.12. Формирование флага FULL буфера FIFO
3.5. ПРОГРАММНОЕ УПРАВЛЕНИЕ РАБОТОЙ АЦП Рассмотрим тексты программ, иллюстрирующие возможности программного управления работой АЦП в циклическом режиме. В этих программах код адреса канала измерения в регистре ADCON установлен по умолчанию (000), что соответствует линии Р5.0 порта Р5. В качестве результата преобразования берутся только 8 старших разрядов преобразования из регистра ADCH. Пример программы циклического запуска АЦП с использованием прерывания: P4 IEN0 ADCON ADCH M1:
ORG EQU EQU EQU EQU MOV MOV
8000h 0C0h 0A8h 0C5h 0C6h IEN0,#0C0h A,ADCON
;разрешение прерывания от АЦП 72
ANLA,#18h ;проверка флагов ADCI и ADCS JNZ M1 MOV R0,#01h ;индикатор состояния АЦП MOV ADCON,#08h ;запуск АЦП M5: CJNE R0,#02H,M5 ;ожидание окончания АЦП LJMP M1 ;-------------------------------------------------------------------------------------------------ORG 8053h ;обработчик прерывания от АЦП MOV A,ADCh ;чтение результата преобразования SWAP A MOV P4,A ;вывод на индикацию MOV ADCON,#00h ;сброс флагов MOV R0,#02h ; установка индикатора состояния АЦП RETI END
Пример программы циклического запуска АЦП с опросом флага готовности: P4 ADCON ADCH M1:
MM5:
ORG EQU EQU EQU
8000H 0C0H 0C5H 0C6H
MOV A,ADCON ANL A,#18H JNZ M1 MOV ADCON,#08H MOV A,ADCON ANL A,#10H JZ MM5 MOV A,ADCH SWAP A MOV P4,A MOV ADCON,#00H LJMP M1 END
;проверка флагов ADCI и ADCS ;запуск АЦП ;ожидание окончания АЦП ;чтение результата преобразования ;вывод на индикацию ;сброс флагов
3.6.ПРОГРАММИРОВАНИЕ КОНТРОЛЛЕРА КЛАВИАТУРЫ И ИНДИКАЦИИ Использование клавиатуры и дисплея на семисегментных индикаторах при работе с УЛС обеспечивается путем программной настройки контроллера клавиатуры и индикации 82С79, которую не73
обходимо выполнять с учетом рекомендаций п. 1.10 настоящего пособия. Ниже приведен пример программирования контроллера 82С79 при вводе и отображении символьных данных: ORG IEN0 EQU MOV MOV MOV MOVX
8000H 0A8H IEN0, #84Hh DPTR,#7FFFh A,#01h @DPTR,A
;разрешение прерывания INT1 ;ввод символа слева, ;декодированный режим
LJMP M2 ORG MOV MOV MOVX
8013h DPTR,#7FFFh A,#40h @DPTR,A
MOV DPTR,#7FFEh MOVX A,@DPTR CJNE A, #11011001B, K1 MOV DPTR,#7FFEh MOV A,#11110011b MOVX @DPTR,A K1:
LJMP CJNE
EXIT A, #11000000B, K2
MOV DPTR,#7FFEh MOV A,#01100000b MOVX @DPTR,A K2:
LJMP CJNE
EXIT A, #11000001B, K3
MOV DPTR,#7FFEh MOV A,#10110101b MOVX @DPTR,A K3:
LJMP CJNE
EXIT A, #11000010B, K4
;обработчик прерывания INT1 ;разрешение чтения FIFO ;клавиатуры ;чтение скан-кода ;проверка скан-кода ;клавиши «0» ;вывод в видеопамять кода ;символа «0» ;проверка скан-кода ;клавиши «1» ;вывод в видеопамять кода ;символа «1» ;проверка скан-кода ;клавиши «2» ;вывод в видеопамять кода ;символа «2» ;проверка скан-кода ;клавиши «3» 74
MOV DPTR,#7FFEh MOV A,#11110100b MOVX @DPTR,A LJMP EXIT K4: CJNE A, #11001000B, K5 MOV DPTR,#7FFEh MOV A,#01100110b MOVX @DPTR,A LJMP EXIT K5 CJNE A, #11001001B, K6 MOV DPTR,#7FFEh MOV A,#11010110b MOVX @DPTR,A LJMP EXIT K6: CJNE A, #11001010B, K7 MOV DPTR,#7FFEh MOV A,#11010111b MOVX @DPTR,A LJMP EXIT K7: CJNE A, #11010000B, K8 MOV DPTR,#7FFEh MOV A,#01110000b MOVX @DPTR,A LJMP EXIT K8: CJNE A, #11010001B, K9 MOV DPTR,#7FFEh MOV A,#11110111b MOVX @DPTR,A LJMP EXIT K9: CJNE A, #11010010B, K10 MOV DPTR,#7FFEh MOV A,#11110110b MOVX @DPTR,A
;вывод в видеопамять кода ;символа «3» ; проверка скан-кода ;клавиши «4» ;вывод в видеопамять кода ;символа «4» ;проверка скан-кода ;клавиши «5» ;вывод в видеопамять кода ;символа «5» ;проверка скан-кода ;клавиши «6» ;вывод в видеопамять кода ;символа «6» ;проверка скан-кода ;клавиши «7» ;вывод в видеопамять кода ;символа «7» ;проверка скан-кода ;клавиши «8» ;вывод в видеопамять кода ;символа «8» ;проверка скан-кода ;клавиши «9» ;вывод в видеопамять кода ;символа «9» 75
LJMP EXIT K10: СJNE A, #11000011B, K11 MOV DPTR,#7FFEh MOV A,#01110111b MOVX @DPTR,A LJMP EXIT K11: CJNE A, #11001011B, K12 MOV DPTR,#7FFEh MOV A,#11000111b MOVX @DPTR,A LJMP EXIT K12: CJNE A, #11010011B, K13 MOV DPTR,#7FFEh MOV A,#10010011b MOVX @DPTR,A LJMP EXIT K13: CJNE A, #11011011B, K14 MOV DPTR,#7FFEh MOV A,#11100101b MOVX @DPTR,A LJMP EXIT K14: CJNE A, #11011000B, K15 MOV DPTR,#7FFEh MOV A,#10010111b MOVX @DPTR,A LJMP EXIT K15: CJNE A, #11011010B, EXIT MOV DPTR,#7FFEh MOV A,#00010111b MOVX @DPTR,A
;проверка скан-кода ;клавиши «A» ;вывод в видеопамять кода ;символа «A» ;проверка скан-кода ;клавиши «B» ;вывод в видеопамять кода ;символа «B» ;проверка скан-кода ;клавиши «C» ;вывод в видеопамять кода ;символа «C» ;проверка скан-кода ;клавиши «D» ;вывод в видеопамять кода ;символа «D» ;проверка скан-кода ;клавиши «*» ;вывод в видеопамять кода ;символа «E» ;проверка скан-кода ;клавиши «#» ;вывод в видеопамять кода ;символа «F»
EXIT: RETI
;выход из обработчика ;прерывания INT1 76
M2: MOV DPTR,#7FFFh MOV A,#90h МOVX @DPTR,A
;разрешение записи в видеопамять ;с автоинкрементированием адреса
LJMP $ END
Представленная программа по скан-коду нажатой клавиши определяет код соответствующего этой клавише шестнадцатеричного символа после чего загружает его в видеопамять дисплея. 3.7. ПРОГРАММИРОВАНИЕ ВЫВОДА СИМВОЛЬНОЙ ИНФОРМАЦИИ НА ЖКИ Рассмотрим пример построения системы диагностики цифрового узла в составе ПЛИС с выводом его состояния на ЖКИ. В качестве узла выбран 4-разрядный двоичный счетчик. Логика работы схемы подключения счетчика к МК, представленной на рис. 3.13 состоит в следующем. Генератор ГОИ1 работает в непрерывном режиме и подключен к С входу вспомогательного счетчика, который при нажатии кнопки ГОИ2 формирует сигнал внешнего прерывания МК INT0. Этот сигнал является импульсным, длительность которого равна 16 периодам внешнего тактового генератора. Одновременно этот сигнал подается на С вход тестируемого счетчика для увеличения его состояния на 1. Задача системы состоит в том, чтобы по сигналу прерывания выводить в первое знакоместо первой строки текущее значение счетчика в шестнадцатеричном формате. Для формирования кода шестнадцатеричного символа в схему включен аппаратный знакогенератор, выполненный на ПЗУ. Файл прошивки этого ПЗУ представлен на рис. 3.14. Значение кода символа для кодирования текущего состояния счетчика считывается в МК по адресу 7FFB. Для контроля работы системы в схеме используются шкалы светодиодных индикаторов. На шкалу Е выводится состояние счетчика в двоичном коде. На шкалы А и В, а также С и D выводится принятый в МК код шестнадцатеричного символа. На первую пару шкал данные выводятся через порт Р4. На шкалы C и D данные выводятся из МК путем выполнения команды записи по адресу 7FFA. 77
Рис. 3.13. Схема тестового примера диагностирования цифрового узла с выводом его текущего состояния на ЖКИ
Рис. 3.14. Файл прошивки ПЗУ знакогенератора шестнадцатеричного кода 78
Ниже приводится текст программы выполняемой МК в данной системе. ORG8000h LJMPM1 ;****************************************************************************************** ORG 8003h ;обработчик прерывания INT0 MOV DPTR, #7FFAh ;прием кода символа в аккумулятор MOVX A, @DPTR MOV R4,A ;сохранение кода символа в R4 SWAP A MOV 0C0h, A ;выдача кода символа в порт Р4 MOV DPTR, #7FFBh ;передача кода для индикации на шкалах ;C и D MOVX @DPTR,A LCALL VIVOD ;вызов подпрограммы вывода на ЖКИ ;символа в первое знакоместо первой ;строки, код символа в R4 RETI ;****************************************************************************************** M1: MOV A,#01h ;настройка прерываний ;INT0 – по фронту MOV TCON,A MOV A,#81h ;разрешение прерывания от INT0 MOV IE,A LJMP $ ;****************************************************************************************** ;подпрограмма вывода на ЖКИ символа в первое знакоместо первой строки ;код символа в R4 VIVOD: MOV A,#38H LCALL DINIT MOV A,#0CH LCALL DINIT MOV A,#06H LCALL DINIT MOV A,#02H LCALL DINIT MOV A,#01H LCALL DINIT MOV A,R4 LCALL DISP
;две строки размер символа 5*8 точек ;вызов подпрограммы записи команды в ;управляющий регистр дисплея ;включение дисплея ;сдвиг курсора вправо после вывода ;символа
;очистка дисплея ;код символа из R4 в аккумулятор ;вызов подпрограммы записи кода ;символа в регистр данных дисплея 79
RET ;**************************************************************************************** ;подпрограмма записи команды в управляющий регистр дисплея DINIT: MOV R0,A MOV DPTR,#7FF6H
;ожидание установки флага завершения ;записи в память дисплея
BF: MOVX A,@DPTR ANL A,#80H JNZ BF MOV DPTR,#7FF4H
;запись кода команды в управляющий ;регистр дисплея
MOV A,R0 MOVX @DPTR,A RET ;***************************************************************************************** ;подпрограмма записи кода символа в регистр данных дисплея DISP: MOV R0,A MOV DPTR,#7FF6H BF1: MOVX A,@DPTR ANL A,#80H JNZ BF1 MOV DPTR,#7FF5H
;ожидание установки флага завершения ;записи в память дисплея
;запись значения кода символа в регистр ;данных дисплея
MOV A,R0 MOVX @DPTR,A RET ;**************************************************************************************** END
3.8. ИЗМЕРЕНИЕ ВРЕМЕННЫХ ИНТЕРВАЛОВ И ПОДСЧЕТ ВНЕШНИХ СОБЫТИЙ ПРИ ПОМОЩИ ТАЙМЕРОВ Т0 И Т1 В состав МК входят два таймера Т0 и Т1, которые могут работать в качестве таймера или счетчика внешних событий. При работе в качестве таймера состояние Т0 и Т1 инкрементируется 1 раз за машинный цикл, то есть за 12 периодов внешнего тактового гене80
ратора. При работе в качестве счетчика внешних событий на входах Т0 и Т1 по спаду 1/0 максимальная частота таких изменений не должна превышать 1/24 частоты внешнего генератора. Для гарантированного прочтения сигналов «0» и «1» на входах Т0 и Т1 время их удержания должно быть не меньше одного машинного цикла. Таймеры Т0 и Т1 могут работать в одном из следующих четырех режимов: 0, 1, 2 и 3. В режимах 0, 1 и 2 таймеры Т0 и Т1 полностью идентичны. В режиме 3 таймер Т1 хранит свое состояние, а таймер Т0 работает как два независимых таймера. Выбор функции таймера (таймер или счетчик событий) и режима его работы определяется программно при помощи регистра TMOD (см. гл. 2). Режимы 0 и 1. Структурная схема таймеров Т0 и Т1 для данных режимов приведена на рис. 3.15.
Рис. 3.15. Структурная схема таймера Т0 для режимов 0 и 1
В режиме 0 регистр TL0 используется как 5-разрядный предделитель (используются 5 младших разрядов, 3 старших игнорируются). В этом случае таймер конфигурируется как 13-разрядный двоичный счетчик. При переполнении этого счетчика устанавливается 81
флаг TF0 и вырабатывается прерывание, если оно разрешено. Из структурной схемы видно, что разрешение выполнения функции таймера обеспечивается следующими установками: С/Т = 0 и Gate = 0 (регистр TMOD) и TR=1 (регистр TCON). Для измерения временного интервала (длительности единичного значения сигнала) по входу INT0 необходимо установить С/Т = 0 и Gate = 1 (регистр TMOD) и TR = 1 (регистр TCON). Для подсчета числа внешних событий по входу Т0 необходимо установить С/Т = 1 и Gate = 0 (регистр TMOD) и TR = 1 (регистр TCON). Режим 1 идентичен режиму 0, а единственным отличием является использование всех 8 бит регистра TL0. В этом режиме таймер конфигурируется как 16-разрядный счетчик. В режиме 2 таймер конфигурируется как 8-разрядный счетчик на основе регистра TL0 (рис. 3.16). При переполнении TL0 происходит не только установка флага TF0, но и автоматическая перезагрузка TL0 содержимым регистра TH0. При перезаписи в TL0 значение TH0 не изменяется. Данный режим используется при необходимости формирования периодических сигналов требуемой
Рис. 3.16. Структурная схема таймера Т0 для режима 2 82
частоты, например, для управления скоростью передачи UART микроконтроллера. В режиме 3 таймер Т1 отключен и регистры TL1 и TH1 сохраняют свое состояние. На рис. 3.17 представлена структурная схема таймера Т0 в режиме 3. Таймер Т0 представляет совокупность двух устройств: таймера/счетчика событий на основе регистра TL0 и таймера на основе регистра TH0, причем последний использует биты TR1 для разрешения работы и TF1 в качестве флага переполнения. Таймер Т1 при этом может использоваться для применений, не требующих использования прерываний. Примером такого использования является управление скоростью обмена передачей последовательного порта (UART) микроконтроллера. Таким образом, режим 3 выбирается при необходимости использования в составе МК третьего дополнительного 8-разрядного таймера.
Рис. 3.17. Структурная схема таймера Т0 для режима 3 83
Рассмотрим некоторые примеры использования таймеров Т0 и Т1. Одной из задач контроля состояния внешнего объекта может является подсчет происходящих в нем событий. Допустим, что требуется при помощи таймера Т0 осуществлять подсчет событий, которые фиксируются на входе Т0 микроконтроллера по следующему правилу: после фиксации 10 событий на указанном входе инкрементируется внутренний программный счетчик, содержимое которого выводится через порт Р4 на светодиодные шкалы А и В для индикации. Так как в УЛС вход Т0 микроконтроллера подключен к ПЛИС, то в ней и должно быть реализовано устройство для генерации внешних событий. На рис. 3.18 приведен пример такого устройства. При нажатии кнопки ГОИ2 устройство вырабатывает импульсный единичный сигнал длительностью 16 периодов тактового генератора. ГОИ1 в этой схеме работает в непрерывном режиме.
Рис. 3.18. Схема устройства для генерации внешнего сигнала таймера Т0 84
Ниже приведен текст программы для реализации подсчета внешних событий и выдачи его результата на индикацию. ORG8000h LJMPSTART ;--------------------------- обработчик прерывания при переполнении таймера Т0 ORG800Bh INC R0 ;увеличение программного счетчика MOV A,R0 SWAP A MOV 0C0h,A ;вывод программного счетчика в порт Р4 CLR TF0 ;сброс флага переполнения таймера Т0 RETI START: MOV R0,#00h CLR TF0 CLR TR0 MOV IE,#82h MOV TMOD,#06 MOV TL0,#0FВh MOV TH0,#0FВh SETB TR0 LJMP $ END
;сброс программного счетчика ;сброс флага переполнения таймера Т0 ;сброс бита разрешения работы таймера Т0 ;разрешение прерывания при переполнении ;таймера Т0 ;Т0 счетчик внешних событий, режим 2 ;установка бита разрешения таймера Т0
Из текста программы видно, что таймер Т0 конфигурируется для работы в качестве счетчика событий в режиме 2. При работе в этом режиме при смене в TL0 значения с FFh на 00h и выработке флага переполнения TF0, происходит автоматическая перезапись в TL0 значения F6h из регистра TH0. Таким образом, значения в регистре TL0 изменяются в следующем порядке: F6 – F7 – F8 – F9 – FA – FB – FC – FD – FE – FF – F6 – … . Очевидно, что переполнение таймера, а следовательно, и разрешенное от него прерывание, возникают каждый раз после фиксирования группы из 10 событий на входе Т0. Таким образом, количество событий в группе определяется значением константы, записанной регистр TH0. При осуществлении контроля внешних событий путем их подсчета по какомулибо сложному закону, требуется реализовать в программе соответствующий порядок изменения значения TH0. Следующий пример демонстрирует использование таймера Т0 для измерения длительности сигнала единичного уровня на входе 85
INT0 микроконтроллера. Данный вход подключен к ПЛИС. На рис. 3.19 приведена схема устройства для формирования сигнала единичного уровня на этом входе.
Рис. 3.19. Схема формирования сигнала единичного уровня на входе INT0
Единичный уровень формируется установкой тумблера «0» клавишного регистра Р1. Состояние линии INT0 контролируется светодиодным индикатором «0» шкалы Е. Ниже приведен текст программы для измерения временных интервалов длительностью до 78 минут. Для подсчета длительности используется программный счетчик на основе регистра-указателя DPTR с выводом на индикацию регистра DPH. При выбранных настройках таймера Т0 единица младшего разряда этого регистра соответствует временному интервалу 18,2 с. 86
ORG8000h LJMPSTART ;-------------------------------------обработчик прерывания при переполнении таймера Т0 ORG800Bh CLR TF0 ;сброс флага переполнения таймера Т0 INC DPTR ;увеличение программного счетчика MOV A,DPH SWAP A MOV 0C0h,A ;вывод старшего байта программного счетчика ;на индикацию RETI START: MOV IE,#82h ;разрешение прерывания при переполнении ;таймера Т0 MOV DPTR,#0000h ;сброс программного счетчика CLR TR0 ;сброс бита разрешения таймера Т0 CLR TF0 ;сброс флага переполнения таймера Т0 MOV TL0, #00h MOV TH0, #00h MOV TMOD,#09h ;Т0 таймер в режиме 1 с запуском по ;единичному значению на входе INT0 SETB TR0 LJMP $ END
;разрешение работы таймера Т0
При решении задач контроля и управления при помощи МК возникает необходимость измерения временных интервалов между внешними событиями, например, фиксируемыми по входам внешних прерываний INT0 и INT1, или отсчета времени между программными событиями, например при достижении определенного значения в регистре или формировании истинного значения заданного логического условия. В этом случае каждому рассматриваемому событию должна быть сопоставлена метка времени. Метки времени событий могут формироваться как результат чтения таймера Т0 двумя способами. Первый из них реализуется временным отключением таймера или его приостановом для последующего чтения и повторного разрешения счета. Второй способ не предусматривает приостанова таймера и его опрос осуществляется «на лету». В первом случае из-за приостанова может накапливаться ошибка, если событиям требуется сопоставлять абсолютные значения, измеренные в единицах времени. При измерении относитель87
ных значений может быть введена поправка с учетом времени выполнения команд приостанова, чтения регистров таймера Т0 и его повторного запуска. При выполнении чтения «на лету» проявляется специфика организации счетчика таймера Т0 в режимах 0 и 1 (13- или 16-разрядного счетчика на основе двух последовательно соединенных регистров TL0 и TН0). Пусть опрос таймера Т0 выполняется путем двух последовательных пересылок значений регистров TL0 и TH0 в регистры общего назначения, например в R0 и R1 соответственно. Метка времени события в этом случае должна формироваться как совокупность значений регистров TL0 и TH0 во втором машинном цикле выполнения команды пересылки значения регистра TL0 в регистр R0. Так как таймер Т0 работает без приостанова, то есть «на лету», то после чтения TL0 и перед чтением регистра TH0 может возникнуть переполнение TL0. В результате переполнения значение, считанное в R1, не будет соответствовать значению TH0 во втором машинном цикле выполнения команды пересылки значения регистра TL0 в регистр R0, как требует условие формирования метки времени события. Поэтому будет получен неправильный результат. Следовательно, необходимо предусмотреть меры по обнаружению таких ситуаций и коррекции значения регистра R1. Этого можно добиться путем выполнения программы, в которой регистры таймера Т0 читаются в таком порядке: TL0, TН0 и снова TL0. В качестве примера рассмотрим следующую последовательность команд: MOVR0,TL0;команда 1 MOVR1,TH0;команда 2 MOVR2,TL0;команда 3 На рис. 3.20 представлена временная диаграмма выполнения этой последовательности команд с точностью до машинного цикла для 6 различных ситуаций, связанных с возникновением переполнений TL0 во время выполнения данной последовательности команд. В таблице 3.1 приведены значения регистров TL0 и TН0 в машинных циклах (i-1) и (i+1), а также значения регистров R0, R1 и R2 после выполнения последовательности команд чтения для всех возможных ситуаций, приведенных на рис. 3.20. 88
Рис. 3.20. Временная диаграмма различных вариантов переполнения регистра TL0 при выполнении последовательности команд чтения Таблица 3.1 Значения регистров TL0 и TН0 и результатов их пересылки в регистры R0, R1 и R2 № п/п 1
TH0 (i-1) TL0(i-1) XYh
TH0(i+1)
R0
R1
R2
FFh
(XY+1)mod256h
01
(XY+1)mod256h
05
2
XYh
FEh
(XY+1)mod256h
00
(XY+1)mod256h
04
3
XYh
FDh
XYh
FFh
(XY+1)mod256h
03
4
XYh
FCh
XYh
FEh
(XY+1)mod256h
02
5
XYh
FBh
XYh
FDh
XYh
01
6
XYh
FAh
XYh
FCh
XYh
00
Примечание: X и Y – произвольные символы шестнадцатеричного алфавита.
Момент времени опроса таймера Т0 при формировании метки времени соответствует машинному циклу (i+1). Значение TL0 в этом цикле соответствует значению регистра R0 после выполнения команды 1. В столбце TH0(i+1) приведены значения этого регистра 89
в данном машинном цикле. Из таблицы видно, что только в случаях 3 и 4 результат чтения регистра TH0, определяемый значением R1, отличается от истинного значения TH0 в машинном цикле (i+1). Это связано с тем, что переполнение TL0 возникло после окончания цикла команды 1, но до окончания цикла команды 2. Как видно из таблицы, для выявления ситуаций 3 и 4 необходимо просто анализировать значение регистра R2. Коррекция R1 путем его уменьшения на 1 выполняется только в том случае, если значение R2 составляет 2 или 3.
Рис. 3.21. Блок схема алгоритма обнаружения переполнения таймера Т0 и коррекции результата формирования метки времени события
На рис. 3.21 приведен алгоритм коррекции значения регистра R1 для получения правильного результата формирования метки времени события. Ниже приведена программа выполнения данного алгоритма. 90
$INCLUDE(PCF552.A51) ORG 8000h MOV TMOD,#01h SETB TR0 MOV R0,TL0 MOV R1,TH0 MOV R2,TL0 CJNE R2,#02h,MET1 MET2: MOV A,R1 ADD A,#0FFh MOV R1,A LJMP TIME MET1: CJNE R2,#03h,TIME LJMP MET2 TIME: END
;таймер Т0 режим 1 ;разрешение работы таймера Т0
;переход, если R2 не равен 2 ;вычитание из R1 единицы ;переход, если R2 не равен 3 LJMP$
3.9. ФОРМИРОВАНИЕ ВРЕМЕННЫХ ИНТЕРВАЛОВ ПРИ ПОМОЩИ ТАЙМЕРА Т2 В системах управления сложными объектами возникает задача формирования многоканальных последовательностей временных интервалов, предназначенных для опроса состояний датчиков с аналоговыми и цифровыми выходами и включения/выключения исполнительных устройств. Причем параметры временных интервалов могут быть фиксированными или изменяться по заданному алгоритму. Таймер Т2 имеет встроенные средства для эффективного решения задачи формирования многоканальных последовательностей временных интервалов сложной структуры. Работа таймера описана в п. 2.5 , а его структурная схема приведена на рис. 2.5. Напомним, что формирование временных интервалов при помощи таймера Т2 реализуется программно управляемым переключением линий порта Р4 при совпадении значений его компараторов и счетчика. При фиксации данных совпадений устанавливаются флаги соответствующих прерываний СМ0, СМ1 и СМ2. Обработчики этих прерываний целесообразно использовать для перезагрузки компараторов и регистров RTE и STE управления переключениями линий порта Р4. 91
Рассмотрим некоторые примеры использования таймера Т2. Допустим, что необходимо сформировать изображенную на рис. 3.22 периодическую многоканальную последовательность временных интервалов. Период данной последовательности составляет 6,5 мс. Заданные значения временных интервалов между моментами переключения линий порта Р4 достаточны для выполнения перезагрузки регистров-компараторов таймера Т2 и регистров управления переключениями линий порта Р4 обработчиками прерываний. При частоте генератора УЛС 11,059 МГц временному интервалу 0,65 мс соответствует значение 257h счетчика таймера Т2.
Рис. 3.22. Многоканальная последовательность временных интервалов
Логика работы программы формирования временных интервалов состоит в следующем. Формирование временных интервалов целесообразно начать с того момента времени, когда значение счетчика таймера Т2 равно 0. При входе в обработчик этого прерывания в регистры-компараторы записываются значения, соответствующие первым после значения Т2 = 0 моментам времени измене92
ния состояний линий порта Р4. В регистры управления состояниями линий порта Р4 загружаются значения, соответствующие номерам переключаемых линий. В табл. 3.2 приведены загружаемые значения для указанных регистров. Так как обработчик прерывания Т2 вызывается однократно, то в его теле необходимо поместить команду запрета прерывания от Т2 (сброса бита ЕТ2 в регистре IEN1). Кроме этого, так же как и при вызове всех других обработчиков прерываний, используемых при работе с таймером Т2, следует сбросить флаг прерывания от переполнения Т2 (бит T2OV регистра TM2IR). Таблица 3.2 Загружаемые регистры обработчика Т2 Момент времени входа в обработчик прерывания
№ входа
Значения, загружаемые в регистры RTE и STE
Значения, загружаемые в регистры СМ0, СМ1 и СМ2
0
1
RTE=83h (7,1,0) STE=60h (2,1)
CMO=257h CM1=95Ch CM2=257h
Управление всеми последующими переключениями линий порта Р4 обеспечивается обработчиками разрешенных прерываний СМ0, СМ1 и СМ2. При передаче управления соответствующему обработчику прерываний по номеру входа осуществляется перезагрузка регистров-компараторов и регистров управления линиями порта Р4 в соответствии с содержимым таблиц 3.3 – 3.5. Таблица 3.3 Загружаемые регистры обработчика СМ0 Момент времени входа в обработчик прерывания
№ входа
Значения, загружаемые в регистр STE
Значения, загружаемые в регистр СМ0
1
1
STE = 21h (5,0)
CMO = СМ0 + 257h
2
2
STE = 10h (4)
CMO = СМ0 + 257h
3
3
STE = 08h (3)
CMO = СМ0 + 257h
93
Продолжение табл. 3.3 Момент времени входа в обработчик прерывания
№ входа
Значения, загружаемые в регистр STE
Значения, загружаемые в регистр СМ0
4
4
STE = 02h (1)
CMO = СМ0 + 4АЕh
6
5
STE = 11h (4,0)
CMO = СМ0 + 257h
7
6
STE = 10h (4)
CMO = СМ0 + 4АЕh
9
7
STE = 06h (2,1)
CMO = СМ0 + 4АЕh
Таблица 3.4 Загружаемые регистры обработчика СМ1 Момент времени входа в обработчик прерывания
№ входа
Значения, загружаемые в регистр RTE
Значения, загружаемые в регистр СМ1
4
1
RTE = RTE(ORL)1Ch (4,3,2)
CM1 = СМ1 + 4AEh
6
2
RTE = RTE(ORL)10h (4)
CM1 = СМ1 + 4AEh
8
3
RTE = RTE(ORL)22h (5,1)
CM1 = СМ1 + 257h
9
4
RTE = RTE(ORL)11h (4,0)
CM1 = СМ1 + 257h
10
5
RTE = RTE(ORL)03h (1,0)
CM1 = СМ1 + 95Ch
94
Таблица 3.5 Загружаемые регистры обработчика СМ2 Момент времени входа в обработчик прерывания СМ2
№ входа
1
1
2
2
RTE = RTE(XRL)C0h (6)
CM2 = СМ2 + 257h
3
3
RTE = RTE(XRL)C0h (7)
CM2 = СМ2 + 4AEh
5
4
6
5
RTE = RTE(XRL)C0h (6)
CM2 = СМ2 + 257h
7
6
RTE = RTE(XRL)C0h (7)
CM2 = СМ2 + 95Ch
Значения, загружаемые в регистр RTE
Значения, загружаемые в регистр СМ2 CM2 = СМ2 + 257h
CM2 = СМ2 + 257h
Далее приводится текст программы для формирования данной многоканальной последовательности временных интервалов. $NOMOD51 ;отмена определения SFR ядра 8051 $INCLUDE(PCF552.INC) ;определение SFR контроллера PCF80552 ;========================================= секция инициализации ORG 8000h MOV TM2CON,#81h ;16-ти разрядное переполнение Т2, ;предделитель=1, Fosc/12 MOV R0,#00h ;сброс номера входа в обработчик ;прерывания СМ0 MOV R1,#00h ;сброс номера входа в обработчик ;прерывания СМ1 MOV R2,#00h ;сброс номера входа в обработчик ;прерывания СМ2 MOV P4,#00h MOV IEN0,#80h ;разрешение всех прерываний MOV IEN1,#80h ;разрешение прерывания при ;переполнении Т2 95
LJMP $ ;==============================обработчик прерывания СМ0 ORG 805Bh LJMP MET_STE ;============================= обработчик прерывания СМ1 ORG 8063h LJMP MET_RTE ;============================== обработчик прерывания СМ2 ORG 806Bh LJMP MET_TOG ;============================== обработчик прерывания T2 ORG 8073h CLR T2OV ;сброс флага 16-ти разрядного ;переполнения таймера Т2 MOV
RTE,#83h
MOV
STE,#06h
MOV MOV MOV MOV MOV MOV MOV
CMH0,#02h CML0,#57h CMH1,#09h CML1,#5Ch CMH2,#02h CML2,#57h IEN1,#70h
CLR
CMI0
;переключение Р4.7 в момент ;времени (1) Р4.1 и Р4.0 в ;момент времени (4) ;переключение Р4.2 и Р4.1 в ;момент времени (1) ;момент времени (1) переключения ;компаратора СМ0 ;момент времени (4) переключения ;компаратора СМ1 ;момент времени (1) переключения ;компаратора СМ2 ;запрет прерывания от ;переполнения Т2 и разрешение ;прерываний от СМ0,СМ1 и СМ2
;сброс флага прерывания от ;компаратора СМ0 CLR CMI1 ;сброс флага прерывания от ;компаратора СМ1 CLR CMI2 ;сброс флага прерывания от ;компаратора СМ2 RETI ;возврат из обработчика прерывания ;от 16-ти разрядного переполнения ;таймера Т2 ;============================вход в обработчик прерывания СМ0 MET_STE: CLR CMI0 ;сброс флага прерывания от ;компаратора СМ0 INC R0 ;инкремент номера входа в обработчик ;прерывания СМ0 CJNE R0,#01h,M11 ;если номер входа=1 96
MOV
STE,#21h
CLR MOV
C A,CML0
;переключение Р4.5 и Р4.0 в ;момент времени (1) ;сброс флага переполнения ;загрузка в СМ0 момента времени ;переключения (2)
ADD A,#57h MOV CML0,A MOV A,CMH0 ADDC A,#02H MOV CMH0,A LJMP EX_STE ;на выход из обработчика ;====================================================== M11: CJNE R0,#02h,M12 ;если номер входа=2 MOV STE,#10h ;переключение Р4.4 в момент ;времени (3) CLR C MOV A,CML0 ;загрузка в СМ0 момента времени ;переключения (3) ADD A,#57h MOV CML0,A MOV A,CMH0 ADDC A,#02H MOV CMH0,A LJMP EX_STE ;на выход из обработчика ;====================================================== M12: CJNE R0,#03h,M13 ;если номер входа=3 MOV STE,#08h ;переключение Р4.3 в момент ;времени (4) CLR C MOV A,CML0 ;загрузка в СМ0 момента времени ;переключения (4) ADD A,#57h MOV CML0,A MOV A,CMH0 ADDC A,#02H MOV CMH0,A LJMP EX_STE ;на выход из обработчика ;====================================================== M13: CJNE R0,#04h,M14 ;если номер входа=4 MOV STE,#02h;переключение Р4.1 в момент ;времени (6) CLR C MOV A,CML0 ;загрузка в СМ0 момента времени ;переключения (6) ADD A,#0AEh MOV CML0,A 97
MOV A,CMH0 ADDC A,#04H MOV CMH0,A LJMP EX_STE ;на выход из обработчика ;====================================================== M14: CJNE R0,#05h,M15 ;если номер входа=5 MOV STE,#11h ;переключение Р4.4 И Р4.0 в момент ;времени (7) CLR C MOV A,CML0 ;загрузка в СМ0 момента времени ;переключения (7) ADD A,#57h MOV CML0,A MOV A,CMH0 ADDC A,#02H MOV CMH0,A LJMP EX_STE ;на выход из обработчика ;====================================================== M15: CJNE R0,#06h,M16 ;если номер входа=6 MOV STE,#10h ;переключение Р4.4 в момент ;времени (9) CLR C MOV A,CML0 ;загрузка в СМ0 момента времени ;переключения (9) ADD A,#0AEh MOV CML0,A MOV A,CMH0 ADDC A,#04H MOV CMH0,A LJMP EX_STE ;на выход из обработчика ;====================================================== M16: ;если номер входа=7 MOV STE,#06h ;переключение Р4.2 И Р4.1 в момент ;времени (1) CLR C MOV A,CML0 ;загрузка в СМ0 момента времени ;переключения (1) ADD A,#0AEh MOV CML0,A MOV A,CMH0 ADDC A,#04H MOV CMH0,A MOV R0,#00h ;сброс номера входа в обработчик EX_STE: RETI ;возврат из обработчика прерывания ;от компаратора СМ0 98
;====================================================== MET_RTE: CLR CMI1 ;сброс флага прерывания от ;компаратора СМ1 INC R1 ;инкремент номера входа в обработчик CJNE R1,#01h,M21 ;если номер входа=1 MOV A,RTE ;переключение Р4.4,Р4.3 и Р4.2 в ;момент времени (6) ANL A,#0C0h ORL A,#1Ch MOV RTE,A CLR C MOV A,CML1 ;загрузка в СМ1 момента времени ;переключения (6) ADD A,#0AEh MOV CML1,A MOV A,CMH1 ADDC A,#04H MOV CMH1,A LJMP EX_RTE ;на выход из обработчика ;====================================================== M21 CJNE R1,#02h,M22 ;если номер входа=2 MOV A,RTE ;переключение Р4.4 в момент времени (8) ANL A,#0C0h ORL A,#10h MOV RTE,A ;MOV RTE,#10h CLR C MOV A,CML1 ;загрузка в СМ1 момента времени ;переключения (8) ADD A,#0AEh MOV CML1,A MOV A,CMH1 ADDC A,#04H MOV CMH1,A LJMP EX_RTE ;на выход из обработчика ;====================================================== M22: CJNE R1,#03h,M23 ;если номер входа=3 MOV A,RTE ;переключение Р4.5 и Р4.1 в ;момент времени (9) ANL A,#0C0h ORL A,#22h MOV RTE,A ;MOV RTE,#22h CLR C 99
MOV
A,CML1
;загрузка в СМ1 момента времени ;переключения (9)
ADD A,#57h MOV CML1,A MOV A,CMH1 ADDC A,#02H MOV CMH1,A LJMP EX_RTE ;на выход из обработчика ;====================================================== M23: CJNE R1,#04h,M24 ;если номер входа=4 MOV A,RTE ;переключение Р4.4 и Р4.1 в ;момент времени (10) ANL A,#0C0h ORL A,#11h MOV RTE,A ;MOV RTE,#11h CLR C MOV A,CML1 ;загрузка в СМ1 момента времени ;переключения (10) ADD A,#57h MOV CML1,A MOV A,CMH1 ADDC A,#02H MOV CMH1,A LJMP EX_RTE ;на выход из обработчика ;====================================================== M24: ;если номер входа=5 MOV A,RTE ;переключение Р4.1 и Р4.0 в ;момент времени (4) ANL A,#0C0h ORL A,#03h MOV RTE,A ;MOV RTE,#03h CLR C MOV A,CML1 ;загрузка в СМ1 момента времени ;переключения (4) ADD A,#5Ch MOV CML1,A MOV A,CMH1 ADDC A,#09H MOV CMH1,A MOV R1,#00h ;сброс номера входа в обработчик EX_RTE: RETI ;возврат из обработчика прерывания ;от компаратора СМ1 ;====================================================== 100
MET_TOG: CLR INC CJNE CLR MOV
CMI2 R2 R2,#01h,M31 C A,CML2
;сброс флага прерывания от ;компаратора СМ2 ;инкремент номера входа в обработчик ;если номер входа=1 ;загрузка в СМ2 момента времени ;переключения (2)
ADD A,#57h MOV CML2,A MOV A,CMH2 ADDC A,#02H MOV CMH2,A LJMP EX_TOG ;на выход из обработчика ;===================================================== M31: CJNE R2,#02h,M32 ;если номер входа=2 XRL RTE,#0C0h ;переключение Р4.6 в момент времени (3) CLR C MOV A,CML2 ;загрузка в СМ2 момента времени ;переключения (3) ADD A,#57h MOV CML2,A MOV A,CMH2 ADDC A,#02H MOV CMH2,A LJMP EX_TOG ;на выход из обработчика ;===================================================== M32: CJNE R2,#03h,M33 ;если номер входа=3 XRL RTE,#0C0h ;переключение Р4.7 в момент времени (5) CLR C MOV A,CML2 ;загрузка в СМ2 момента времени ;переключения (5) ADD A,#0AEh MOV CML2,A MOV A,CMH2 ADDC A,#04H MOV CMH2,A LJMP EX_TOG ;на выход из обработчика ;====================================================== M33: CJNE R2,#04h,M34 ;если номер входа=4 CLR C MOV A,CML2 ;загрузка в СМ2 момента времени ;переключения (6) ADD A,#57h
101
MOV CML2,A MOV A,CMH2 ADDC A,#02H MOV CMH2,A LJMP EX_TOG ;на выход из обработчика ;====================================================== M34: CJNE R2,#05h,M35 ;если номер входа=5 XRL RTE,#0C0h ;переключение Р4.6 в момент времени (7) CLR C MOV A,CML2 ;загрузка в СМ2 момента времени ;переключения (7) ADD A,#57h MOV CML2,A MOV A,CMH2 ADDC A,#02H MOV CMH2,A LJMP EX_TOG ;на выход из обработчика ;===================================================== M35: ;если номер входа=6 XRL RTE,#0C0h ;переключение Р4.7 в момент времени (1) CLR C MOV A,CML2 ;загрузка в СМ2 момента времени ;переключения (1) ADD A,#5Ch MOV CML2,A MOV A,CMH2 ADDC A,#09H MOV CMH2,A MOV R2,#00h ;сброс номера входа в обработчик EX_TOG: RETI ;возврат из обработчика прерывания ;от компаратора СМ2 END
Результат работы составленной для решения данной задачи программы можно проконтролировать при помощи логического анализатора. Для этого перед запуском программы на исполнение в ПЛИС необходимо загрузить проект, представленный на рис. 3.23. При помощи этого проекта линии порта Р4 подключаются к каналам СН А0 – СН А7 логического анализатора.
102
Рис. 3.23. Схема подключения порта Р4 микроконтроллера к каналам СН А0 – СН А7 логического анализатора
На рис. 3.24 представлена временная диаграмма, полученная при помощи логического анализатора. Помимо структуры многоканальной последовательности сигналов при помощи анализатора в режиме маркерных измерений проверяются и значения временных интервалов. Например, на временной диаграмме представлен результат измерения интервала между моментами времени 0 и 1 исходной диаграммы, который составляет 650 мкс. Таким образом, по полному соответствию исходной диаграммы (рис. 3.23) и временной диаграммы анализатора можно судить о правильности работы программы.
103
Рис. 3.24. Временная диаграмма, полученная при помощи логического анализатора
104
Список литературы 1. Схемотехника ЭВМ. Лабораторный практикум: учебное пособие / Под ред. Б.Н. Ковригина. – 3-е изд., перераб. и доп. – М.: МИФИ, 2006. – 212 с. 2. Ковригин Б.Н. Введение в инструментальные средства проектирования и отладки цифровых устройств на ПЛИС: Учебнометодическое пособие. – М.: МИФИ, 2006. – 192 с. 3. Дмитриев Н.А. Универсальный лабораторный стенд. Инструментальные средства проектирования и отладки. Электронное учебное пособие. 50 с.
105
0 X X X X X X X
Примечание: На состояние флагов могут влиять операции с PSW и с его отдельными битами.
Флаги С OV AC
ОБОЗНАЧЕНИЯ, ИСПОЛЬЗУЕМЫЕ В ОПИСАНИИ СИСТЕМЫ КОМАНД
CLR С CPLC ANLC.bit ANLC. /bit ORLC.bit ORLC. /bit MOV C.bit CJNE
Команда
– Регистры R7-R0 текущего банка регистров общего назначения; – 8-ми разрядный адрес данных. Это может быть адрес внутренней памяти данных (0-127) или регистра специальных функций (128-255); @Ri – 8-ми разрядный косвенный адрес внутренней памяти данных (0-255). Используются только R1 и R0; #data – 8-ми битная константа; #data 16 – 16-ти битная константа; addr 16 – 16-ти битный адрес, обеспечивает переход на любой адрес в пределах всего пространства памяти программ; addr 11 – 11-ти битный адрес, обеспечивает переход на любой адрес в пределах двухкилобайтной страницы, на которой находится первый байт следующей инструкции; rel – Смещение в виде числа со знаком в диапазоне от –128 до +127 относительно адреса первого байта следующей команды; bit – прямой адрес бита во внутренней памяти данных или области регистров специальных функций.
Rn direct
X X X X X X 0 X 0 X X X X 1
ADD ADDC SUBB MUL DIV DA RRC RLC SETB С
X X X
Флаги С OV AC
Команда
Команды, которые изменяют состояние флагов
Приложение 1
ADD ADD ADD ADD ADDC ADDC ADDC ADDC SUBB SUBB SUBB SUBB INC INC INC INC DEC DEC DEC DEC INC MUL DIV DA
A,Rn A,direct A,@Ri A,#data A,Rn A,direct A,@Ri A,#data A,Rn A.direct A,@Ri A,#data A Rn direct @Ri A Rn direct @Ri DPTR AB AB A
МНЕМОНИЧЕСКОЕ ОБОЗНАЧЕНИЕ АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ
Сложить регистр и аккумулятор Сложить прямо адресуемый байт и аккумулятор Сложить косвенно адресуемый байт и аккумулятор Сложить непосредственные данные и аккумулятор Сложить регистр и аккумулятор с переносом Сложить прямо адресуемый байт и аккумулятор с переносом Сложить косвенно адресуемый байт и аккумулятор с переносом Сложить непосредственные данные и аккумулятор с переносом Вычесть регистр из аккумулятора с заемом Вычесть прямо адресуемый байт из аккумулятора с заемом Вычесть косвенно адресуемый байт из аккумулятора с заемом Вычесть непосредственные данные из аккумулятора с заемом Инкрементировать аккумулятор Инкрементировать регистр Инкрементировать прямо адресуемый байт Инкрементировать косвенно адресуемый байт Декрементировать аккумулятор Декрементировать регистр Декрементировать прямо адресуемый байт Декрементировать косвенно адресуемый байт Инкрементировать регистр указатель данных Умножить аккумулятор на регистр В Разделить аккумулятор на регистр В Десятичная коррекция аккумулятора
ОПИСАНИЕ
1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 1 2 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 24 48 48 12
ВРЕМЯ ВЫПОЛНЕНИЯ ДЛИНА (БАЙТ) (ПЕРИОДОВ ГЕНЕРАТОРА)
A,Rn A,direct A,@Ri A,#data direct,A direct,#data
A,Rn A,direct A,@Ri A,#data direct,A direct,#data
A A A
ORL ORL ORL ORL ORL ORL
XRL XRL XRL XRL XRL XRL
CLR CPL RL
ЛОГИЧЕСКИЕ ОПЕРАЦИИ ANL A,Rn ANL A,direct ANL A,@Ri ANL A,#data ANL direct,A ANL direct,#data
МНЕМОНИЧЕСКОЕ ОБОЗНАЧЕНИЕ
Логическое И регистра и аккумулятора Логическое И прямо адресуемого байта и аккумулятора Логическое И косвенно адресуемого байта и аккумулятора Логическое И непосредственных данных и аккумулятора Логическое И аккумулятора и прямо адресуемого байта Логическое И непосредственных данных и прямо адресуемого байта Логическое ИЛИ регистра и аккумулятора Логическое ИЛИ прямо адресуемого байта и аккумулятора Логическое ИЛИ косвенно адресуемого байта и аккумулятора Логическое ИЛИ непосредственных данных и аккумулятора Логическое ИЛИ аккумулятора и прямо адресуемого байта Логическое ИЛИ непосредственных данных и прямо адресуемого байта Исключающее ИЛИ регистра и аккумулятора Исключающее ИЛИ прямо адресуемого байта и аккумулятора Исключающее ИЛИ косвенно адресуемого байта и аккумулятора Исключающее ИЛИ непосредственных данных и аккумулятора Исключающее ИЛИ аккумулятора и прямо адресуемого байта Исключающее ИЛИ непосредственных данных и прямо адресуемого байта Обнуление аккумулятора Побитно инвертировать аккумулятор Циклический сдвиг аккумулятора влево
ОПИСАНИЕ
12 12 12 12 12 24 12 12 12 12 12 24 12 12 12 12 12 24 12 12 12
1 2 1 2 2 3 1 2 1 2 2 3 1 2 1 2 2 3 1 1 1
ВРЕМЯ ВЫПОЛНЕНИЯ ДЛИНА (БАЙТ) (ПЕРИОДОВ ГЕНЕРАТОРА)
A A A A
Циклический сдвиг аккумулятора влево через перенос Циклический сдвиг аккумулятора вправо Циклический сдвиг аккумулятора вправо через перенос Переставить местами полубайты аккумулятора
ОПИСАНИЕ
ОПЕРАЦИИ ПЕРЕСЫЛКИ ДАННЫХ MOV Переслать регистр в аккумулятор A,Rn MOV Переслать прямо адресуемый байт в аккумулятор A.direct A,@Ri MOV Переслать косвенно адресуемый байт в аккумулятор A,#data MOV Переслать непосредственные данные в аккумулятор Rn,A MOV Переслать аккумулятор в регистр Rn,direct MOV Переслать прямо адресуемый байт в регистр Rn,#data MOV Переслать непосредственные данные в регистр direct,A MOV Переслать аккумулятор в прямо адресуемый байт direct,Rn MOV Переслать регистр в прямо адресуемый байт Переслать один прямоадресуемый байт в другой direct,direct MOV Переслать косвенно адресуемый байт в прямо адресуемый direct,@Ri MOV байт Переслать непосредственные данные в прямо адресуемый direct,#data MOV байт Переслать аккумулятор в косвенно адресуемый байт @Ri,A MOV Переслать прямо адресуемый байт в косвенно адресуемый @Ri,direct MOV байт Переслать непосредственные данные в косвенно адресуемый @Ri,#data MOV байт
RLC RR RRC SWAP
МНЕМОНИЧЕСКОЕ ОБОЗНАЧЕНИЕ
12 12 12 12 12 24 12 12 24 24 24 24 12 24 12
3 1 2 2
12 12 12 12
1 2 1 2 1 2 2 2 2 3 2
1 1 1 1
ВРЕМЯ ВЫПОЛНЕНИЯ ДЛИНА (БАЙТ) (ПЕРИОДОВ ГЕНЕРАТОРА)
DPTR,#data16 A,@A+DPTR
A,@A+PC
A,@Ri
A,@DPTR
@Ri,A
@DPTR,A
direct direct A,Rn A,direct
A,@Ri
A,@Ri
MOV MOVC
MOVC
MOVX
MOVX
MOVX
MOVX
PUSH POP XCH XCH
XCH
XCHD
МНЕМОНИЧЕСКОЕ ОБОЗНАЧЕНИЕ
Переслать 16-ти разрядные данные в в регистр указатель Переслать в аккумулятор данные из памяти программ по адресу, определяемому как сумма регистра указателя и аккумулятора Переслать в аккумулятор данные из памяти программ по адресу, определяемому как сумма счетчика команд и аккумулятора Переслать в аккумулятор косвенно адресуемые через регистр данные из внешней памяти данных Переслать в аккумулятор косвенно адресуемые через регистр указательданные из внешней памяти данных Переслать данные в косвенно адресуемую через регистр ячейку внешней памяти данных из аккумулятора Переслать данные в косвенно в косвенно адресуемую через регистр указатель ячейку внешней памяти данных из аккумулятора Поместить прямо адресуемые данные в стек Извлечь из стека прямо адресуемые данные Поменять местами содержимое регистра и аккумулятора Поменять местами содержимое прямо адресуемого байта и аккумулятора Поменять местами содержимое косвенно адресуемого байта и аккумулятора Поменять местами младшие тетрады косвенно адресуемого байта и аккумулятора
ОПИСАНИЕ
24
1
12 12
1
12
2 1
24 24 24 12
24 1 2 2 1
1
24
24
1
1
24
3
ВРЕМЯ ВЫПОЛНЕНИЯ ДЛИНА (БАЙТ) (ПЕРИОДОВ ГЕНЕРАТОРА)
C,bit bit,С rel rel rel rel bit,rel
MOV MOV JC JNC JB JNB JBC
Сбросить бит переноса Сбросить прямо адресуемый бит Установить бит переноса Установить прямо адресуемый бит Инвертировать бит переноса Инвертировать прямо адресуемый бит Логическое И прямо адресуемого бита и бита переноса Логическое И инверсии прямо адресуемого бита и бита переноса Логическое ИЛИ прямо адресуемого бита и бита переноса Логическое ИЛИ инверсии прямо адресуемого бита и бита переноса Переслать прямо адресуемый бит в бит переноса Переслать бит переноса в прямо адресуемый бит Переход, если бит переноса установлен Переход, если бит переноса не установлен Переход, если прямо адресуемый бит установлен Переход, если прямо адресуемый бит не установлен Переход, если прямо адресуемый бит установлен и сброс бита
ОПИСАНИЕ
УПРАВЛЕНИЕ ПЕРЕХОДАМИ, ВЫЗОВАМИ И ВОЗВРАТАМИ ИЗ ПОДПРОГРАММ Абсолютный вызов подпрограммы addr11 ACALL Длинный вызов подпрограммы addr16 LCALL Возврат из подпрограммы RET
C,bit C,/bit
ORL ORL
БИТОВЫЕ ОПЕРАЦИИ CLR С CLR bit SETB С SETB bit CPL С CPL bit ANL C,bit ANL C,/bit
МНЕМОНИЧЕСКОЕ ОБОЗНАЧЕНИЕ
24 12 24 24 24 24 24 24
2 2 2 2 2 3 3 3
24 24 24
24 24
2 2
2 3 1
12 12 12 12 12 12 24
1 2 1 2 1 2 1
ВРЕМЯ ВЫПОЛНЕНИЯ ДЛИНА (БАЙТ) (ПЕРИОДОВ ГЕНЕРАТОРА)
rel rel A,direct,rel
A,#data,rel
Rn,#data,rel
@Ri,#data,rel
Rn.rel
direct,rel
JZ JNZ CJNE
CJNE
CJNE
CJNE
DJNZ
DJNZ
NOP
addr11 addr16 rel @A+DPTR
RETI AJMP LJMP SJMP JMP
МНЕМОНИЧЕСКОЕ ОБОЗНАЧЕНИЕ
Возврат из подпрограммы обработки прерывания Абсолютный переход Длинный переход Короткий переход по относительному адресу Косвенный переход по адресу, определяемому суммой аккумулятора и регистра указателя Переход, если аккумулятор равен 0 Переход, если аккумулятор не равен 0 Сравнить прямо адресуемый байт с аккумулятором и выполнить переход, если они не равны Сравнить непосредственные данные с аккумулятором и выполнить переход, если они не равны Сравнить непосредственные данные с регистром и выполнить переход, если они не равны Сравнить непосредственные данные с косвенно адресуемыми данными и выполнить переход, если они не равны Декрементировать регистр и выполнить переход, если он не равен 0 Декрементировать прямо адресуемый байт и выполнить переход, если он не равен 0 Пустая операция
ОПИСАНИЕ
24
3
3 1
24 12
24
24
3 2
24
3
24
24 24 24
1 2 2
3
24 24 24 24
1 2 3 2
ВРЕМЯ ВЫПОЛНЕНИЯ ДЛИНА (БАЙТ) (ПЕРИОДОВ ГЕНЕРАТОРА)
Аккумулятор АЦП, ст.байт
Управление АЦП
Регистр В
Управление защелками Регистр защелка 3 ст. Регистр защелка 2 ст. Регистр защелка 1 ст. Регистр защелка 0 ст. Компаратор 2 ст. Компаратор 1 ст. Компаратор 0 ст. Регистр защелка 3 мл. Регистр защелка 2 мл. Регистр защелка 1 мл. Регистр защелка 0 мл. Компаратор 2 мл. Компаратор 1 мл. Компаратор 0 ст. Регистр указатель данных (2 байта)
ADCON#
В*
CTCON# CTH3# CTH2# CTH1# CTH0# CMH2# CMH1# CMH0# CTL3# CTL2# CTL1# CTLO# CML2# CML1# CML0# DPTR:
ОПИСАНИЕ
ACC* ADCH#
ОБОЗНАЧЕНИЕ
EBH CFH CEH CDH CCH CBH САН C9H AFH AEH ADH ACH ABH AAH A9H
FOH
C5H
EOH C6H
CTN3
F7
ADC.1
E7
ПРЯМОЙ АДРЕС Ст. бит
CTP3
F6
ADC.O
E6
CTN2
F5
ADEX
E5
CTP2
F4
ADCI
E4
CTN1
F3
ADCS
E3
E1
CTP1
F2
CTN0
F1
AADR2 | AADR1
E2
Символы, альтернативные функции (адреса битов)
Регистры специальных функций микроконтроллера PCF80C552
СТР0
F0
AADR0
E0
Мл.бит
00Н
00Н xxxxxxxxB xxxxxxxxB xxxxxxxxB xxxxxxxxB 00Н 00Н 00Н xxxxxxxxB xxxxxxxxB xxxxxxxB xxxxxxxxB 00Н 00Н
00Н
xx000000B
00Н xxxxxxxxB
Значение после Reset
Приложение 2
Разрешение прерывания 0
Разрешение прерывания 1
Приоритет прерывания 0
Приоритет прерывания 1
Порт 5
Порт 4
Порт 3
IEN1*#
IP0*#
IP1*#
P5#
P4#
P3*
Регистр указатель данных старший Регистр указатель данных младший
ОПИСАНИЕ
IEN0*#
DPL
ОБОЗНАЧЕНИЕ DPH
B0H
С0Н
C4H
F8H
B8H
E8H
A8H
82H
FE
WR A6
A7
B6
RD
CMT0
B7
C6
C7 СМТ1
ADC6
ADC7
PCM2
FF PT2
PAD
–
BE
BF
ЕЕ ECM2
EF ET2
EAD
AE
EA
AF
ПРЯМОЙ АДРЕС Ст. бит 83H
A5
T1
B5
CMSR5
C5
ADC5
PCM1
FD
PS1
BD
ECM
ED
ES1
AD
A4
T0
B4
CMSR4
C4
ADC4
РСМО
FC
PSO
ВС
ECMO
EC
ESO
AC
A3
INT1
B3
CMSR3
C3
ADC3
РСТЗ
FB
PT1
BB
ECT3
EB
ET1
AB
A2
INT0
B2
CMSR2
C2
ADC2
РСТ2
FA
PX1
BA
ECT2
EA
EX1
AA
C0
ADC0
PCT0
F8
PX0
B8
ECT0
E8
EX0
A8
Мл.бит
A1
TXD
B1
А0
RXD
B0
CMSR1 CMSR0
C1
ADC1
PCT1
F9
PTO
B9
ECT1
E9
ETO
A9
Символы, альтернативные функции (адреса битов)
FFH
FFH
xxxxxxxxB
00Н
x0000000B
00Н
00Н
00Н
Значение после Reset 00Н
Порт 1
Порт 0
Управление мощностью
Слово состояния программы
P1*
PO*
PCON#
PSW*
D0H
87H
80H
90H
A0H
AC
D6
D7 CY
–
SMOD
AD6
86
AD7
SCL
87
A14 96
SDA
A15 97
ПРЯМОЙ АДРЕС Ст. бит
F0
D5
–
AD5
85
RT2
A13 95
RS1
D4
WLE
AD4
84
T2
A12 94
RS0
D3
GF1
AD3
83
CT3I
A11 93
OV
D2
GFO
AD2
82
CT2I
A10 92
F1
D1
PD
AD1
81
CT1I
A9 91
Символы, альтернативные функции (адреса битов)
P
D0
IDL
AD0
80
CT0I
A8 90
Мл.бит
00Н
00xx0000B
FFH
FFH
FFH
Значение после Reset
PWM предделитель PWM регистр 1 PWM регистр 0 Разрешение сброса/ переключения
Указатель стека
Буфер данных UART
Регистр управления UART
PWMP# PWM1# PWM0# RTE#
SP
S0BUF
S0CON*
98H
99H
81H
FEH FDH FCH EFH
9F SM0
TP47
9E SM1
TP46
9D SM2
RP45
9C REN
RP44
9B TB8
RP43
9A RB8
RP42
99 Tl
RP41
98 Rl
RP40
00Н
xxxxxxxxB
07H
00H 00Н 00Н 00Н
* – регистры специальных функций, допускающие побитную адресацию; # - регистры специальных функций, которые имеют либо модифицированные функции, либо добавлены к базовому ядру MCS-51.
Порт 2
ОПИСАНИЕ
P2*
ОБОЗНАЧЕНИЕ
00Н
00Н
00Н 00Н
00Н
00Н С0Н
Значение после Reset 00Н 00Н F8H
* – регистры специальных функций, допускающие побитную адресацию; # - регистры специальных функций, которые имеют либо модифицированные функции, либо добавлены к базовому ядру MCS-51.
ПРЯМОЙ Символы, альтернативные функции (адреса битов) АДРЕС Ст. бит Мл.бит DBH ………………. SLAVE ADDRESS …………………… GC DAH D9H SC4 SC3 SC2 SC1 SCO 0 0 0 DF DE DD DC DB DA D9 D8 SICON#* Регистр управления I2C D8H CR2 ENS1 STA STO SI AA CR1 CRO STE# Разрешение установки EEH TG47 TG46 SP45 SP44 SP43 SP42 SP41 SP40 TH1 Таймер 1 старший 8DH 00Н THO Таймер 0 старший 8CH 00Н TL1 Таймер 1 младший 8BH 00Н TLO Таймер 0 младший 8AH 00Н TMH2# Таймер 2 старший EDH 00Н TML2# Таймер 2 младший ECH 00Н TMOD Регистр выбора режимов 89H GATE С/Т М1 MO GATE С/Т М1 М0 таймеров 0 и 1 8F 8E 8D 8C 8B 8A 89 88 TCON* Управление таймерами 0 и 1 88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TM2CON# Управление таймером 2 EAH T2IS1 T2IS0 T2ER T2B0 T2P1 T2P0 T2MS1 T2MS0 CF CE CD CC CB CA C9 C8 TM2IR#* Регистр флагов прерывания C8H T20V CMI2 СМI1 CMIO CTI3 CTI2 CTI1 CTI0 таймера 2 T3# Таймер 3 FFH
ОБОЗНАОПИСАНИЕ ЧЕНИЕ S1ADR# Регистр адреса I2C SIDAT# Регистр данных I2C S1STA# Регистр статуса I2C