Научная статья на тему 'Универсальный микропроцессорный блок с открытыми каналами ввода-вывода'

Универсальный микропроцессорный блок с открытыми каналами ввода-вывода Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
616
43
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
МИКРОКОНТРОЛЛЕР / ПРОГРАММА / МИКРОПРОЦЕССОР / АЛГОРИТМ / АССЕМБЛЕР / ДИНАМИЧЕСКАЯ ИНДИКАЦИЯ / ОПРОС КЛАВИАТУРЫ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Масленникова С. И., Ситников А. В., Ситников И. А.

В статье авторы рассматривают вопросы создания универсального микропроцессорного блока открытой архитектуры, приводят сравнительный анализ микроконтроллеров PIC серии, дают краткие характеристики некоторых моделей микроконтроллеров. На основании проведенного анализа в качестве ядра микропроцессорного блока выбран микроконтроллер PIC16F84. В статье приведена блок-схема и принципиальная электрическая схема универсального микропроцессорного блока, подробно рассмотрены система динамической индикации и опроса клавиатуры. В работе приводится алгоритм и программа прошивки микроконтроллера с использованием подпрограммы динамической индикации для четырехоконного светодиодного табло и опроса четырехкнопочной клавиатуры. Программа, написанная на языке ассемблера, снабжена подробными комментариями. Предлагаемая схема может быть адаптирована для решения широкого класса задач, и при необходимости ее можно дополнить другими электронными устройствами. DOI: 10.7463/rdopt.0215.0779481

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Масленникова С. И., Ситников А. В., Ситников И. А.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Универсальный микропроцессорный блок с открытыми каналами ввода-вывода»

Ссылка на статью:

// Радиооптика. МГТУ им. Н.Э. Баумана. Электрон. журн. 2015. № 02. С. 47-68.

Б01: 10.7463/п1о1*.0215.0779481

Представлена в редакцию: 08.02.2015 http://radiooptics.ru Исправлена: 26.02.2015

© МГТУ им. Н.Э. Баумана

УДК 621.38

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

Масленникова С. И.1, Ситников А. В.1'*,

л

Ситников И. А.

1МГТУ им. Н.Э. Баумана, Москва, Россия 2ООО АМ «АРТ-ПЛЮС, Москва, Россия

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

Ключевые слова: микроконтроллер, микропроцессор, алгоритм, программа, ассемблер, динамическая индикация, опрос клавиатуры

Введение

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

- высокое быстродействие;

- наличие большого количества каналов ввода/вывода информации;

- большой объем памяти для записи программы и хранения данных;

- низкое энергопотребление;

- совместимость с внешними электронными устройствами, позволяющими собирать и отображать информацию;

Радиооптика

- высокая нагрузочная способность;

- возможность изменения программы, записанной в памяти микроконтроллера;

- высокая надежность;

- малые габариты, вес, стоимость.

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

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

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

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

Структура универсального микропроцессорного блока (УМПБ)

Блок-схема УМПБ приведена на рис. 1.

Рис. 1 Блок-схема УМПБ

В состав блока входят (рис. 1):

- микроконтроллер класса PIC со схемой формирования тактовой частоты (PIC и СФТЧ);

- модуль семисегментных индикаторов (МСИ);

- модуль клавиатуры (Кл);

- буферные устройства, осуществляющие сопряжение внешних модулей с микроконтроллером (Буф);

- дешифратор (ДШ), участвующий в работе системы динамической индикации и опросе клавиатуры;

- простейший генератор звуковой частоты (ГЗЧ) с динамической головкой (ДГ).

Связь микропроцессора с внешними устройствами осуществляется с помощью

четырехразрядных шины данных (ШД) и шины адреса (ША), а так же с помощью дополнительных каналов ввода/вывода. Выбор окна индикатора происходит через дешифратор с помощью шины выбора индикатора и клавиатуры (ШВИК).

Основным достоинством УМПБ является его открытая архитектура, т.е. возможность как наращивать число внешних устройств, так и сокращать их количество.

Выбор микроконтроллера

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

периферийными устройствами. По существу, именно количество и вид каналов взаимодействия МП с внешними устройствами и отличают один микроконтроллер от другого.

Например, микроконтроллер PIC16F84 имеет тринадцать каналов ввода/вывода (два порта: PORTA - пять разрядов; PORTB - восемь разрядов), а микроконтроллер PIC12F675 6-ти разрядный порт ввода/вывода и встроенный модуль АЦП (аналого-цифровой преобразователь) [2]. Следовательно, микросхема PIC16F84 применяется в системах управления цифровыми электронными устройствами, а PIC12F675 - для обработки аналоговой инфомации и формирования цифровых управляющих сигналов. Естественно, что число ножек микросхемы PIC16F84 больше, чем у PIC12F675 (тип корпуса первого -18-DIP, а второго - 8-DIP) [3].

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

В качестве примера приведем характеристики некоторых PIC микроконтроллеров, которые являются определяющими при использовании их в системах управления [3].

PIC12F675

Параметры микросхемы:

- число каналов ввода/вывода - 6;

- дополнительные возможности при работе с периферийными устройствами — встроенный десятиразрядный АЦП, аналоговый компаратор с программируемым источником опорного напряжения;

- максимальная тактовая частота - 20 МГц;

- размер памяти программ - 1.75 Кб;

- тип логики - внутренняя - КМОП, внешняя - ТТЛ совместимая;

- тип корпуса - 8-DIP, SOIC-8.

PIC16F84

Параметры микросхемы:

- количество каналов ввода/вывода - 13;

- дополнительные возможности при работе с периферийными устройствами — четыре источника прерывания: внешний вход INT, переполнение таймера, прерывание при изменении сигналов на линиях порта B, по завершению записи данных в память EEPROM;

- максимальная тактовая частота - 4 МГц;

- размер памяти программ - 1 Кб;

- тип логики - внутренняя - КМОП, внешняя - ТТЛ совместимая;

- тип корпуса - 18-DIP, SOIC-18.

PIC18F2550

Параметры микросхемы:

- количество каналов ввода/вывода - 24;

- дополнительные возможности при работе с периферийными устройствами —10 каналов 10-ти разрядных АЦП,

- максимальная тактовая частота - 48 МГц;

- размер памяти программ - 32 Кб;

- тип логики - внутренняя - КМОП, внешняя - ТТЛ совместимая;

- тип корпуса - 28-DIP, SOIC-28.

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

Для организации УМПБ авторами выбран микроконтроллер PIC16F84. Определяющим критерием при выборе микроконтроллера являлось наличие достаточно большого числа каналов ввода/вывода, небольшие габариты и возможность сопряжения с ТТЛ логикой. Однако число каналов недостаточно для подключения светодиодного индикатора, клавиатуры и внешних устройств напрямую к портам ввода/вывода микросхемы. Для управления четырьмя семисегментными индикаторами требуется (семь сегментов и знак «точка») 8x4 = 32 канала, для опроса 4-х кнопочной клавиатуры нужны еще четыре канала. Таким образом, только для этих целей необходимо иметь 36 каналов ввода/вывода. А ведь нужно подключить еще и внешние устройства!

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

В качестве буферных элементов УМПБ используются регистры памяти с разрешением записи.

ГГЗЧ представляет собой простейший генератор импульсов частоты звукового диапазона. Он может быть собран на одном или двух вентилях НЕ [4]. Генератор работает непрерывно, но разрешение на работу динамика (ДГ) подается с микроконтроллера. Используется генератор, например, для звукового подтверждения нажатия кнопки клавиатуры.

Структура программы на PIC

Для отладки программы и формирования двоичного (шестнадцатиричного) файла для закачки в память микроконтроллера существует ряд как чисто программных, так и программно-аппаратных средств. К чисто программным средам отладки относятся симуляторы, к программно-аппаратным - дебаггеры, программаторы. Сейчас можно найти, как простейшие бесплатно распространяемые версии симуляторов, так и многофункциональные (относительно дорогие) программы. Например, компания Microchip Technology Inc предоставляет для скачивания программные оболочки MPLAB и PIC

Simulator IDE [2]. Первая предоставляется как бесплатная версия и дает возможность разработчикам составить текст исходного кода программы для микроконтроллера с возможностью отладки и исправления ошибок, имеет функцию предупреждений и финальной оптимизации проекта. Вторая - платная. Она представляет собой мощное программное обеспечение, включающее в себя графическую среду разработки, симулятор, Basic-компилятор, ассемблер, дизассемблер, отладчик. В настоящее время симулятор поддерживает около восьмидесяти моделей 8-битных микроконтроллеров компании Microchip архитектуры Midrange, принадлежащих сериям PIC12F, PIC16F и PIC10F.

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

Программа для PIC содержит четыре блока.

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

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

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

4) Основной текст программы (тело программы).

Обзор регистров

В МК PIC16F84 кроме регистров общего назначения, для которых выделяется область памяти с адресами от 00C16 до 04F16, существуют специальные регистры (область памяти с адреса 00016 до 00B16). К специальным регистрам относятся, например, регистры OPTION (регистр конфигурации) и STATUS (регистр состояния). В первом содержатся биты, определяющие формат прерывания, а во втором содержится информация, например, о переполнении регистра общего назначения при выполнении с его содержимым операций сложения, вычитания, сдвига и т.д. (бит 0 регистра STATUS) или равенстве нулю (бит 2 регистра STATUS). К этим битам регистра состояния удобно обращаться при выполнении сравнения двух чисел.

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

Классификация команд

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

Для проведения большинства операций с данными используется регистр хранения текущей информации, который называют аккумулятором (W register в документации Data Sheet от фирмы-производителя). Результат проводимой операции с данными можно записать или по адресу регистра, заявленного в блоке соответствия имени и адреса регистров, либо в аккумулятор.

Команды, работающие с регистрами, имеют следующий формат: МЕТКА: ДИРЕКТИВА РЕГИСТР-источник данных,РЕГИСТР хранения результата «МЕТКА:» представляет собой символьное обозначение адреса данной команды, она ставится в случае, если к этой команде необходимо перейти при выполнении ветвления программы.

Пример команды байтовой операции: оЫ: INCF COUNT,0 ; Инкремент

Эта запись означает, что процессор выполнит увеличение на 1 (инкремент) содержимого регистра COUNT и сохранит результат в аккумуляторе. 0 после запятой означает, что результат сохраняется в аккумуляторе, 1 - в регистре, который является источником, в нашем примере - регистр с именем «COUNT». Все, что записано после знака «;» является комментарием и процессором игнорируется. Первые три символа и двоеточие команды определяют метку, на которую в программе может быть осуществлен переход. Также «оЫ» может означать имя подпрограммы, начинающейся с этой команды. Выход из подпрограммы осуществляется по команде RETURN.

Большая часть команд содержит информацию об операнде в синтаксисе самой директивы, например:

ADDWF ind3,1 ;Прибавить к W ind3

По этой команде процессор проведет операцию сложения содержимого аккумулятора W и регистра ind3. Результат будет помещен в регистр ind3.

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

Например:

MOVLW b'01010011' ;Записать в аккумулятор двоичное число 01010011

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

При работе с отдельными битами регистра в команде указывается номер этого бита, например:

BSF STATUS,2 ;Установить бит 2 регистра STATUS (бит Z, т.е. равенства 0) в значение 1

Синтаксис команд перехода простой:

ДИРЕКТИВА МЕТКА

Пример:

GOTO оЫ ;Переход на метку «оЫ»

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

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

Принципиальная схема УМПБ

Принципиальная электрическая схема УМПБ изображена на рис. 2.

Рис. 2 Принципиальная электрическая схема УМПБ

Основным элементом схемы является микроконтроллер PIC16F84 (DD1). К перечисленным выше характеристикам микропроцессора, являющегося ядром PIC16F84,

можно добавить, что он имеет восьми разрядную шину данных и четырнадцати разрядную систему команд из тридцати пяти инструкций. Все команды, кроме команд перехода, выполняются за один машинный цикл. Микроконтроллер выполнен по технологии КМОП с возможностью сопряжения портов ввода/вывода с микросхемами ТТЛ технологии. МП имеет восьмиуровневый стек, четыре источника прерывания, встроенные таймеры (TMR0 и WatchDog). Напряжение питания на микроконтроллер можно подавать от 2 В до 6 В. Нагрузочная способность довольно высокая: 20 мА по входу и 25 мА по выходу. В состав ядра микроконтроллера входят 36 восьмибитных регистра общего назначения, 15 специальных регистров, 64 байт электрически программируемой памяти (EEPROM) для хранения данных, 1024 четырнадцати разрядных машинных слов электрически программируемой программной памяти.

Для обеспечения работы МК с заданной тактовой частотой к его входам OSC1 и OSC2 подключается кварцевый резонатор QZ на 4 МГц и дополнительные конденсаторы С1-С3. Резонансная частота кварца определяет быстродействие работы системы.

В состав микроконтроллера входят два порта ввода/вывода: пятиразрядный PORTA и восьми разрядный PORTB. Направление информационного потока на ввод или на вывод может быть изменено программно. Некоторые выходы портов имеют двойное назначение, например, на вход A4 PORTA можно подавать тактовые импульсы для счетчика таймера TMR0, а биты B6 и B7 PORTB используются при программировании EEPROM.

В качестве буферных элементов в схеме использованы восьмиразрядные регистры 555ИР27 с разрешением записи. Это ТТЛ микросхемы с большой нагрузочной способностью (коэффициент разветвления по выходу - 20) и высоким быстродействием (время задержки распространения при включении/выключении от входа к выходу - менее 27 нс) [5]. Избыточность регистров (в схеме используются четыре разряда из восьми) позволяет изменить структуру блока, например, вместо четырех разрядной шины данных использовать восьми разрядную.

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

Генератор звуковой частоты УМПБ собран на двух вентилях 2И-НЕ микросхемы 555ЛА3 и представляет собой два инвертора, включенных последовательно (DD2.1 и DD2.2). Эти два инвертора имеют емкостную обратную связь, причем емкость конденсатора С4 и время задержки распространения при включении/выключении микросхемы 555ЛА3 ( менее 20 нс) определяют частоту работы генератора [5]. Третий вентиль 2И-НЕ микросхемы 555ЛА3 (DD2.3) используется для разрешения или запрета подачи звукового сигнала. Управление осуществляется с вывода бита B7 PORTB микроконтроллера.

Табло отображения информации собрано из четырех светодиодных знакогенерирующих семисегментных индикаторов с дополнительным сегментом «точка» SC04-11GWA. Каждый индикатор выполнен в корпусе типа 14-DIP, имеют зеленый

цвет свечения, рассчитаны на напряжение 2.2 В и ток 10 мА. Размер индикатора 18.75 мм x 9.8 мм x 5.08 мм. Схема подключения индикаторов - общий катод.

Выбор определенного окна светодиодного индикатора для отображения на нем информации происходит через регистр DD6 и дешифратор DD7 (555ИД10). Дешифратор преобразует двоичное число на входе (D1, D2, D4, D8) в двоично-десятичный на выходе (Q0-9). Это означает, что при двоичном входном коде 0000 на выходе появится низкий логический уровень на Q0, а все остальные выходы будут высокого логического уровня (1111111110). При входе 0011, на выходе будет код 1111110111. Микросхемы 555ИД10 представляют собой дешифратор на десять выходов с открытым коллектором, коэффициентом разветвления по выходу, равным десяти, с временем распространения при включении/выключении менее 50 нс [5].

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

Выходы дешифратора DD7 подключаются к общему катоду индикаторов HL1-4. Появление низкого логического уровня на катоде и высокого на аноде определенного сегмента HL1 -4 приведет к свечению выбранного сегмента.

С помощью резисторов Ю-10 номиналом 300 Ом ограничивается ток, протекающий через светодиод. Следовательно, изменяя номинал резисторов, можно изменить яркость свечения светодиодного экрана.

Простейшая четырехкнопочная клавиатура £1-4 при необходимости может быть расширена до десяти кнопок. Оптимальным же, по мнению авторов, представляется использование шести кнопок. Функции этих кнопок могут быть следующими: две кнопки вертикального перемещения по меню, две кнопки горизонтального перемещения по индикатору, кнопка ВВОД (Enter) и кнопка ВЫХОД (Esc). В предлагаемой схеме используются только минимальная конфигурация клавиатуры: четыре кнопки, например, две кнопки вертикального перемещения по меню, две кнопки горизонтального перемещения по индикатору, которые используются также как ВВОД (Enter) и ВЫХОД (Esc).

Резистор подтягивает вход порта B4 микроконтроллера к высокому

логическому уровню при разомкнутых ключах £1-4. Диоды VD1-4 исключают влияние клавиатуры на индикаторы. Таким образом, при замкнутом одном из ключей £1-4 и одновременно при появлении на выходе дешифратора DD7, соответствующего данному ключу, низкого логического уровня, на входе B4 PORTB МК появится логический 0. Это явится признаком нажатия соответствующей кнопки клавиатуры [6,7].

Динамическая индикация и опрос клавиатуры (ДИ и ОК)

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

Четыре младших бита восьмиразрядного порта ввода/вывода PORTB PIC16F84 программируется на вывод информации. Для этого в системе команд МК можно использовать регистр TRISB. Если записать в этот регистр все нули, то все каналы порта B установятся в режим «Вывод», если единицы, то - «Ввод». Программирование порта можно осуществлять и побитно. Четыре младших разряда (канала) порта A образуют шину данных, четыре старших разряда порта B - шину адреса.

Для управления семисегментными индикаторами необходимо иметь восемь каналов (восемь бит информации). Например, для отображения на индикаторе цифры 2 необходимо подать высокий логический уровень (логическую единицу) на сегменты A, B, D, E, G и низкий уровень (логический ноль) на все остальные сегменты (рис. 3).

А А

В О

Рис. 3 Управление семисегментным индикатором

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

КР555ИР27) формируют восемь разрядов подключаемых к сегментам A-H индикатора. Выбор необходимого анода осуществляется с помощью микросхем ББб (микросхемы памяти КР555ИР27) и ££7 (дешифратор КР555ИД4).

Работа схемы происходит по следующему алгоритму.

1) На шине данных формируются младшие четыре разряда полуслова (в нашем примере - 1011 двоичного кода). Эта цифра поступает на входы всех буферных элементов схемы фШ, ББ4, ББ5 и ££6).

2) На шине адреса формируется двоичный код, с помощью которого будет активирована микросхема ££4. Активным для микросхем КР555ИР27 является низкий логический уровень на входе «О» (вход синхроимпульса, ножка 11). Т.е. на шине адреса должен быть сформирован код 11012. В момент прихода низкого уровня на вход «С» микросхемы ££4 информация с ее входов D0, D1, D2, D3 переписывается на выходы Q0, 01, Q2, Q3.

3) На вход «С» микросхемы ££4 подается логическая единица (высокий логический уровень) и микросхема переходит в режим хранения информации. Теперь при изменении состояния ШД информация на выходе ££4 не изменится. Это будет продолжаться до тех пор, пока не произойдет очередная активизация микросхемы.

4) В шину данных записываются четыре старших разряда кода символа «2», т.е. число 01012.

5) В шину адреса записывается число 10112, что переводит микросхему ПП5 в режим записи. На выходе ПП5 формируется число 01012.

6) На вход «0> микросхемы ПП5 подается логическая единица и микросхема переходит в режим хранения.

7) Теперь необходимо на катод светодиодного индикатора подать низкий логический уровень. Если логический ноль подать на все четыре семисегментных индикатора, то изображение двойки появится сразу во всех индикаторных окнах. Для формирования изображения двойки, например, на первом индикаторе, необходимо записать число 0ю (00002) в микросхему ББ6 по вышеизложенному алгоритму. Этот двоичный код поступит на вход дешифратора ББ7 и будет преобразован в двоично-десятичный, т.е. на выходе Q0 дешифратора ББ7 появится низкий логический уровень, а на Ql-9 - высокий. Таким образом, на светодиодном табло в первом окне загорится изображение цифры 2, а остальные окна останутся темными.

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

1) Погасить все индикаторы, подав на их катоды высокий логический уровень (записать число 11112 в микросхему ББ6).

2) Записать за два цикла в микросхемы ББ4 и ПП5 цифровой код, соответствующий числу, которое нужно отобразить на индикаторе.

3) Записать номер нужного индикатора в микросхему ББ6. Нужная цифра отобразиться в выбранном окне.

4) Снова погасить индикаторы и повторить операции записи информации в соответствии с новым окном.

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

Пример программы для МК с использованием подпрограммы ДИ и ОК

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

Алгоритм программы приведен на рис. 4.

Рис. 4 Алгоритм программы МК с использованием ДИ и ОК

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

После этого происходит выполнение следующих действий:

- если нажата клавиша 1, то увеличивается на единицу цифра, отображаемая в окне 1 индикаторного табло. Если значение становится больше девяти, происходит сброс значения в ноль;

- если нажата клавиша 2, то увеличивается на единицу цифра, отображаемая в окне 2. Если значение становится больше девяти, происходит сброс значения в ноль;

- если нажаты другие клавиши, никаких изменений на табло на происходит;

- далее программа переходит в режим ожидания отпускания клавиши. Это необходимо для того, чтобы по однократному нажатию клавиши индикатор многократно не инкрементировал значение цифры индикаторного табло;

- при отпускании клавиши программа возвращается к подпрограмме ДИ и ОК и циклическому ожиданию нажатия клавиши.

Листинг программы приводится ниже. Программа содержит идентификационный блок (операторы list и include), блок задания имен регистров. Тело программы начинается с метки нулевого адреса (ADR00) и заканчивается оператором end. Подпрограмма ДИ и ОК начинается с метки DI и заканчивается оператором return.

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

При вызове подпрограммы ДИ регистры ind1 - ind4 должны содержать то значение цифр, которые предполагается отразить на индикаторном табло, а в регистр nni записывается номер окна индикатора, которое будет активизировано при обращении к подпрограмме первым.

В программе используются, кроме ind1 - ind4 и nni, следующие регистры:

tnni - текущий номер индикаторного окна;

tind - текущий регистр хранения цифры индикаторного окна;

tinm - младший полубайт двоичного кода, соответствующего формированию изображения цифры на семисегментном индикаторе;

tins - старший полубайт двоичного кода, соответствующего формированию изображения цифры на семисегментном индикаторе;

count - счетчик числа циклов индикации;

Содержимое этих регистров можно не сохранять при выходе из подпрограммы ДИ и

ОК.

kl - номер нажатой клавиши;

fkl - флаг нажатия клавиши. В fkl записывается FF16, если нажата хотя бы одна клавиша и 00, если не нажата ни одна клавиша.

В подпрограмме используется процедуры DII и IND. Процедура DII заносит в аккумулятор содержимое одного из регистров indi - ind4 с номером, который содержится в nni, а процедура IND формирует двоичный код, который соответствует цифре содержимого соответствующего регистра indi - ind4. Две эти процедуры являются примером относительной системы адресации.

Далее приводится текст программы с использованием ДИ и ОК с комментариями. ПРОГРАММА

list p=16f84 include P16F84.INC ind1=h'0C' ;В регистрах ind1-4 хранятся цифры, которые

ind2=h'0D' ,-должны отображаться на светодиодном табло

ind3=h'0E' ind4=h'0F'

nni=h'10' ,'Номер активного окна табло

tinm=h'11' ,'Регистры для хранения текущей информации

tins=h'12'

tnni=h'13'

tind=h'14'

kl=h'15' ,-Номер последней нажатой клавиши

fkl=h'16' ;Флаг нажатия клавиши. 00 кл. нажата, FF нет

coun=h'17' ,'Счетчик

ADR00: clrf INTCON ;НАЧАЛО ПРОГРАММЫ. Запрет прерывания clrw ,'Настройка PORTA на выход

tris PORTA

goto l1 ,'Переход на метку l1

INT04: goto INT04 ;П/п обработки прерывания (не используется) l1: movlw h'70' ,'Настройка PORTB: биты В0,1,2,3,7-выход

tris PORTB ;В4,5,6 - вход

movlw h'08' ,'Гасится индикатор: активизируется

movwf PORTA ,'восьмой выход дешифратора,

bsf PORTB,3 ,'запись в микросхему DD6 числа 8

bcf PORTB,3 bcf PORTB,7 ,'Запрет писка

clrf ind1 ,Запись в ind1-4 и nni значения 0

clrf ind2 clrf ind3 clrf ind4 clrf nni

12: call DI ;Вызов п/п ДИ и ОК

decf fkl,0 ;fkl=0? Клавиша нажата?

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

btfsc STATUS,C

goto l2 ;Клавиша не нажата. Перейти на метку l2

movf kl,0 ;Клавиша нажата

sublw h'01' ;kl=1?

btfss STATUS,Z ;

goto l4 ;kl не равно 1. Перейти на метку l4

incf ind1,1 ;Нажата клав. 1. Значение ind1 увеличить на 1

movf ind1,0 ;Проверить ind1=10?

sublw h'0A'

btfss STATUS,Z ;

goto l3 ;Значение ind1 не равно 10. Перейти на l3

clrf ind1 ;ind1=10. Перезаписать ind1=0

l3: call DI ;Ожидание отпускания клавиши. Вызов ДИ и ОК

decf fkl,0 ;Клавиша нажата?

btfsс STATUS,C

goto l2 ;Клавиша не нажата. Переход на метку l2

goto l3 ;Клавиша нажата. Возврат метку на l3

l4: movf kl,0

sublw h'02' ;kl=2?

btfss STATUS,Z

goto l2 ;kl не равно 2. Перейти на метку l2

incf ind2,1 ;Нажата клав. 2. Значение ind2 увеличить на 1

movf ind2,0 ;Проверить ind2=10?

sublw h'0A'

btfsс STATUS,Z

clrf ind2 ;ind2=10. Перезаписать ind2=0

goto l3 ;Значение ind2 не равно 10. Перейти на l3

DI: movlw h'04' ; ПОДПРОГРАММА ДИ и ОК

movwf coun /Заносится в счетчик циклов число 4

clrf fkl /Обнуление флага нажатия клавиши

d3: movlw h'08'/Гасится индикатор, для чего активизируется

movwf PORTA /восьмой выход дешифратора

bsf PORTB,3 /Запись в регистр DD6 bcf PORTB,3

movf nni,0 ;В W заносится номер индикатора

call DII ;П/п записи в W значения ind(nni)

call IND ;П/п перевода ind(nni) в двоичный код W

movwf tind /Запись двоичного кода в tind

andlw h'0F' /Сброс в 0 4 старших бита W

movwf tinm /Запись 4-х младших бита в tinm

swapf tind,0 /Поменять местами мл. и ст. полубайты

;tind в W

andlw h'0F' /Сброс в 0 4 старших бита W

movwf tins /Запись 4-х младших бита в tins

movf tinm,0 /Запись tinm в микросхему DD4 movwf PORTA

bsf PORTB,1

bcf PORTB,1 movf tins,0 movwf PORTA

bsf PORTB,2

bcf PORTB,2 movf nni,0 movwf PORTA

bsf PORTB,3

; Запись tins в микросхему DD5

,Запись nni в микросхему DD6

okl:

bcf PORTB,3

btfsc PORTB,4 ;Опрос B4 PORTB, клавиша нажата?

goto d1 /Клавиша не нажата, перейти на метку d1

movf nni,0 /Клавиша нажата, записать номер клавиши в kl movwf kl

movlw h'FF' /Установить флаг fkl=FF (нажата)

movwf fkl

d1

decf coun,1 ;Счетчик coun уменьшить на 1 btfss STATUS,Z ;Счетчик =0?

d2

goto d2 clrf nni return incf nni,1 goto d3

,Счетчик не равен 0, перейти на метку d2 ,'Счетчик =0, записать число 0 0 в пп1 ,-Выход из п/п Б1

,'Увеличить на 1 пп1 ,'Перейти на метку d3 ШБ: addwf РСЬ,1 ,'Процедура записи двоичного кода для семисегм. retlw Ь'ЕС' ,'индикатора в W. Для этого счетчик команд

увеличивается на число, записанное в W. Далее ,'следует выход из процедуры с занесением кода ; в W.

retlw h'60' retlw h'DA'

retlw h'F2' retlw h'66' retlw h'B6' retlw h'BE' retlw h'E0' retlw h'FE' retlw h'F6' retlw h'EE' retlw h'3E' retlw h'9C' retlw h'7A' retlw h'9E' retlw h'8E'

DII: addwf PCL,1 ;Процедура занесения в W содержимого ind1-4 movf ind1,0 ;в соответствии с номером, который записан в return ;W. Для этого счетчик команд увеличивается на

movf ind2,0 ;номер индикатора, записанный в W. return

movf ind3,0 return

movf ind4,0 return

end ;Конец программы

Заключение

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

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

Себестоимость такого устройства низкая, оно надежно в эксплуатации и не требует дополнительной настройки.

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

При включении АЦП и ЦАП в состав схемы, к УМПБ можно подключить аналоговые датчики и исполнительные устройства. При необходимости снижения габаритов блока, после отладки программы индикаторы и клавиатуру можно отключить.

Список литературы

1. Новиков Ю.В., Скоробогатов П. К. Основы микропроцессорной техники. СПб.: Бином, 2009. 336 с.

2. Microchip: company website. Режим доступа: http://microchip.com/downloads/en/DeviceDoc/30009630k.pdf (дата обращения 05.06.2015).

3. Get ready to see a new world of 8-bit PIC® MCUs // Microchip: company website. Режим доступа: http://microchip.com/pagehandler/en-us/family/8bit (дата обращения 05.06.2015).

4. Ситников А.В. Электротехнические основы источников питания: учебник. М.: Академия, 2014. 240 с.

5. Нефедов А.В. Интегральные микросхемы и их зарубежные аналоги: Справочник. Т. 5. М.: РадиоСофт, 2000. 608 с.

6. Сизов А.Н. Программирование современных Р1С16, Р1С12 на PonyProg // Радио. 2004. № 2. С. 31-33.

7. Белов А.В. Самоучитель по микропроцессорной технике. М.: Наука и техника, 2003. 224 с.

8. Ситников А.В., Ажгиревич И.Л., Пущин А.В. Стенд для управления шаговым двигателем // Инженерный вестник. МГТУ им. Н.Э. Баумана. Электрон. журн. 2014. № 5. Режим доступа: http://engbul.bmstu.ru/doc/709836.html (дата обращения 10.02.2015).

Radiooptics

Radiooptics of the Bauman MSTU, 2015, no. 02, pp. 47-68.

DOI: 10.7463/rdopt.0215.0779481

Received: 08.02.2015

Revised: 26.02.2015

http://radiooptics.ru © Bauman Moscow State Technical Unversity

Universal Microprocessor Unit with Open I/O Channels

S.I. Maslennikova , A.V. Sitnikov I.A. Sitnikov2

'' sit nina@mailju

bauman Moscow State Technical University, Moscow, Russia 2Ltd. AM "ART-PLUS", Moscow, Russia

Keywords: microcontroller, microprocessor, algorithm, program, assembler, dynamic display,

keyboard scanning

Most modern electronic devices are based on microprocessors. High speed and lots of RAM allows us to use them in real time processing of information flows. In this article, the authors discuss the issues of creating a universal microprocessor unit (UMU) with open architecture that can be included in various electronic devices.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

The authors analyzed the characteristics of commercially available microcontrollers of PIC series. Based on this analysis, the authors suggest criteria for the selection of components to create the microprocessor unit.

The article presents a block diagram and a circuit diagram of a universal microprocessor

unit.

The universal microprocessor unit is based on the PIC16F84 microcontroller. The unit comprises a led board and a primitive keyboard interfaced with the microcontroller through the buffer elements - memory registers. The module also includes a primitive sound generator and a buffer register to connect additional external devices.

The paper presents the algorithm and code listing of a simple program of the microcontroller firmware with detailed comments. Special attention is paid to dynamic display information, which can significantly reduce the number of the microcontroller I/O channels to serve the led display.

UMU can be used both to control a variety of electronic and electromechanical devices and to debug microcontroller programs and even to teach in microprocessor technology and programming in assembler language.

References

1. Novikov Yu.V., Skorobogatov P. K. Osnovy mikroprotsessornoi tekhniki [Fundamentals of microprocessor technology]. St. Petersburg, Binom Publ., 2009. 336 p. (in Russian).

2. Microchip: company website. Available at: http://microchip.com/downloads/en/DeviceDoc/30009630k.pdf , accessed 05.06.2015.

3. Get ready to see a new world of 8-bit PIC® MCUs. Microchip: company website. Available at: http://microchip.com/pagehandler/en-us/family/8bit , accessed 05.06.2015.

4. Sitnikov A.V. Elektrotekhnicheskie osnovy istochnikov pitaniya [Electrical fundamentals of power sources]. Moscow, Akademiya Publ., 2014. 240 p. (in Russian).

5. Nefedov A.V. Integral'nye mikroskhemy i ikh zarubezhnye analogi: Spravochnik. T. 5 [Integrated circuits and their foreign counterparts: a Handbook. Vol. 5]. Moscow, RadioSoft Publ., 2000. 608 p. (in Russian).

6. Sizov A.N. Programming of modern PIC16, PIC12 on PonyProg. Radio, 2004, no. 2, pp. 3133. (in Russian).

7. Belov A.V. Samouchitel'po mikroprotsessornoi tekhnike [Tutorial on microprocessor technology]. Moscow, Nauka i tekhnika Publ., 2003. 224 p. (in Russian).

8. Sitnikov A.V., Azhgirevich I.L., Pushchin A.V. Stand for stepper motor control. Inzhenernyi vestnik MGTU im. N.E. Baumana = Engineering Herald of the Bauman MSTU, 2014, no. 5. Available at: http://engbul.bmstu.ru/doc/709836.html , accessed 10.02.2015. (in Russian).

i Надоели баннеры? Вы всегда можете отключить рекламу.