Проектирование микроконтроллера на микропроцессоре 8086





Министерство  образования Республики Беларусь

Брестский политехнический институт

Кафедра ЭВМ и С

 

 

 

 

 

“К защите допускаю”

                Б.Н. Склипус


“     “                    1999 г.


 

 

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА 

К КУРСОВОМУ ПРОЕКТУ

 

на тему: Проектирование микроконтроллера на микропроцессоре 8086

 

КП.АС01.956140.011

 

 

Листов  44

 

 

 

 

Руководитель:

ст. преподаватель Склипус Б. Н.

Нормоконтроль:

ассистент Кулик Т. Б.

Выполнил:

студент группы АС-1

Лукичев В. В.

 

 

 

 

 

 

 

 

 

 

Брест 1999 

СОДЕРЖАНИЕ

 

 

Введение 4

1. Функциональное проектирование 6

1.1. Анализ  исходных данных 6

1.2. Выбор и  обоснование структуры микроконтроллера 7

1.3. Обобщенный  алгоритм функционирования 10

2. Структурное проектирование 12

2.1. Разработка  алгоритма программного обеспечения 12

2.2. Реализация программного обеспечения на языке ассемблера 14

2.3. Проектирование  структуры блоков микроконтроллера 17

2.3.1. Проектирование  структуры блока памяти 18

2.3.2. Проектирование  структуры блока ввода данных 22

2.3.3. Проектирование  структуры блока индикации 25

2.3.4. Программное  управление устройствами ввода  – вывода 31

2.3.5. Проектирование  блока центрального процессора 32

3. Схемотехническое проектирование 38

Заключение 43

Список  используемой литературы 44

 

Приложения

Приложение 1         Микроконтроллер. Схема электрическая структурная

Приложение 2         Микроконтроллер. Схема алгоритма

Приложение 3         Листинг программного обеспечения

Приложение 4         Микроконтроллер. Схема электрическая  принципиальная

 

 

ВВЕДЕНИЕ

 

 

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

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

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

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

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

 

 

  1. ФУНКЦИОНАЛЬНОЕ ПРОЕКТИРОВАНИЕ

 

 

    1. Анализ исходных данных

 

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

Исходя из всего выше сказанного, выберем формат входных  данных.

  1. Так как целая часть величины веса изменяется в диапазоне [0..100] кг, то для её представления достаточно семи бит.
  2. Так как точность контроля – до десятых долей, то для представления дробной части достаточно четырех бит.

Для удобства обработки  выберем следующий формат слова  входных данных (рис. 1.1): в старшем  байте слова передается целая часть текущей величины веса, а в младшей – дробная часть.

 

                       15    14    13    12    11    10     9     8      7      6      5     4      3     2     1      0

 

*

*

*

*

*

*

*

       

*

*

*

*



                                               Целая часть                                                     Дробная часть


Рис. 1.1. Формат входных  данных

 

Биты 15, 7-4 не используются (см. рис. 1.1.). При считывании их просто необходимо обнулить.

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

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

  1. “U” (от англ. Up), если это локальный минимум, т.е. если вес возрастает;
  2. “d” (от англ. Down), если это локальный максимум, т.е. если вес убывает.

Определим количество светодиодных матриц, необходимых для отображения  результатов обработки входных  данных:

  • для отображения дробной части величины веса – 1 светодиодная матрица;
  • для отображения целой части величины веса – 3 светодиодных матриц;
  • для отображения идентификатора направления изменения веса – 1 светодиодная матрица.

Всего необходимо для отображения результатов: 5 светодиодных матриц.

Подведем  итоги:

  1. входные данные в цифровом виде поступают через параллельный порт как 16-разрядное слово;
  2. результат обработки (выходные данные) поступают на устройства индикации. Количество необходимых восьмисегментных светодиодных матриц: 5 штук.

 

 

    1. Выбор и обоснование структуры микроконтроллера

 

При анализе  исходных данных в предыдущем пункте был выяснен формат входных и  выходных данных. Здесь мы обнаружили, что входные данные являются 16 -разрядными. Отсюда напрашивается вывод о  том, что микроконтроллер необходимо построить на базе такого микропроцессора, который оперировал бы 16 – разрядными данными (хотя, в принципе, можно использовать и 8–разрядный микропроцессор, но аппаратная реализация микроконтроллера в этом случае будет несколько сложнее). Основным претендентом на место такого микропроцессора является центральный процессор К1810ВМ86 из микропроцессорного комплекта К1810.

Микросхема К1810ВМ86 представляет собой однокристальный 16-битовый микропроцессор, выполненный по n-МДП технологии. Кристалл микросхемы имеет довольно компактные геометрические размеры (5,5 * 5,5 мм), при которых содержит около 29 000 транзисторов и потребляет 1,7 Вт от источника питания +5 В. Схема выпускается в 40-выводном корпусе.

Микропроцессор  К1810ВМ86 содержит 14 16-битовых внутренних регистров и образует 16-битовую шину данных для связи с внешней памятью и портами ввода-вывода. Шина адреса имеет 20 линий, что позволяет непосредственно адресоваться к памяти емкостью до 1Мбайт. Для сокращения необходимого числа выводов БИС младшие 16 адресных линий мультиплексированы во времени с линиями данных и составляют единую шину адреса/данных. Четыре старшие адресные линии аналогично мультиплексированы с линиями состояния. Чтобы сигналы этих линий можно было использовать в системе, их обязательно разделяют с помощью внешних схем, т.е. осуществляют демультиплексирование шин.

При выполнении операций ввода-вывода используются 8- или 16-битовые адреса, так что  кроме доступа к основной памяти, микропроцессор может обращаться к  портам, суммарная емкость памяти которых составляет 64Кбайт.

Кроме того, наличие  большого числа схем различной степени  интеграции в микропроцессорном  комплекте К1810 упрощает разработку микропроцессорных систем. Существенное значение имеет возможность использования  совместимых с комплектом К1810 программируемых БИС серии К580.

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

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

  1. блок памяти, служащий для хранения кода программы, задающий алгоритм обработки входных данных;
  2. блок ввода, который предназначен для приема входных данных из внешней среды и передачи их для обработки в блок центрального процессора;
  3. блок индикации, предназначенный для отображения на индикаторах пикового значения веса и направления его изменения. Данные в этот блок передаются из блока центрального процессора после определения им этого пикового значения;
  4. блок центрального процессора, построенный на базе описанной выше микросхемы К1810ВМ86 и предназначенный для реализации алгоритма обработки, хранящегося в блоке памяти, над входными данными, получаемыми из блока ввода.

Блок центрального процессора является ядром системы и связан с остальными блоками шиной управления (ШУ), шиной данных (ШД) и шиной  адреса (ША).

Таким образом, структурная  схема микроконтроллера может быть представлена как совокупность функциональных блоков (рис. 1.2.), соединенных между собой в соответствии с требованиями интерфейсов. В приведенной схеме обработку информации осуществляет микропроцессор. Обмен информацией между микропроцессором и остальными блоками микроконтроллера осуществляется по трем шинам: адресной, данных и управления.

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

Схема электрическая  структурная микроконтроллера приведена  в приложении 1.

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 1.2. Микроконтроллер. Схема электрическая структурная

 

 

    1. Обобщенный алгоритм функционирования

 

По включению питания  происходит следующая последовательность действий:

  1. запуск программы управлением микроконтроллером из блока памяти;
  2. начальная инициализация структур данных и инициализация устройств, входящих в состав микроконтроллера;
  3. считывание слова входных данных из блока ввода;
  4. обработка считанных данных блоком центрального процессора с целью обнаружения локального экстремума функции веса;
  5. если локальный экстремум не найден, то переходим на шаг (3), иначе – (6);
  6. преобразуем экстремальное значение веса в формат данных блока индикации и посылаем в блок индикации;
  7. переходим на шаг (3).

Алгоритм повторяется  до выключения питания микроконтроллера.

 

 

  1. СТРУКТУРНОЕ ПРОЕКТИРОВАНИЕ

 

 

2.1.   Разработка алгоритма программного обеспечения

 

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

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

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

Таблица 2.1

Значение  флага направления

Характер  изменения веса

0

Величина  веса уменьшается

1

Величина  веса увеличивается


 

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

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

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

1) После включения питания,  работа начинается с инициализации  всех блоков микроконтроллера и задания начальных значений всем переменным. Так, здесь задается режим функционирования блока индикации. Для определения начального значения флага направления изменения веса и переменной “предыдущее значение веса” выполняется следующая последовательность шагов: считывается из блока ввода данных информация о величине веса и присваивается переменной “предыдущее значение веса”. Затем, чтобы определить направление изменения веса, нужно знать еще и текущее значение веса, поэтому считываем информацию о величине веса из блока ввода данных снова, и считаем ее текущим значением веса. Для гарантии однозначного определения флага направления, считывание будем производить до тех пор, пока считанная величина не станет больше или меньше предыдущего значения веса. Как только предыдущее и текущее значения веса перестанут быть равными величинами, инициализируется флаг направления согласно таб.2.1, и блок инициализации заканчивается.

2)   По  значениям переменных “Предыдущее значение веса” и “Текущее значение веса” происходит анализ направления изменения величины веса. Если значения переменных “Предыдущее значение веса” и “Текущее значение веса” равны, т.е. вес не изменился, переходим к шагу (6). Если вес увеличился, переходим к шагу (3). Если вес уменьшился, переходим к шагу (4).

3) Анализируем  значение флага направления. Если  флаг направления равен нулю, т.е. вес до сих пор уменьшался, то следовательно, предыдущее  значение веса является пиковым  значением функции изменения  веса и поэтому выводим значение  переменной “Предыдущее значение веса” и символ “U” на индикаторы и изменяем значение флага направления изменения веса на 1 (т.е. теперь вес возрастает). Переходим к шагу (5)

4) Если при этом флаг  направления равен единице, т.е.  вес до сих пор увеличивался, то, следовательно, предыдущее значение веса есть пиковое значение функции изменения веса и поэтому выводим на индикаторы значение переменной “Предыдущее значение веса” и символ “d”, обозначающий уменьшение веса. Так же изменяем значение флага направления изменения веса на 0 (вес уменьшается). Переходим к шагу (5).

5) Значению переменной  “Предыдущее значение веса” присваиваем значение переменной “Текущее значение веса’.

6) Считываем из блока  ввода данных “Текущее значение веса” и переходим на шаг (2).

Завершение работы алгоритма происходит при выключении питания.

 

 

2.2.   Реализация программного обеспечения  на языке ассемблера

 

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

В проектируемом  микроконтроллере используется раздельное адресное пространство памяти и портов ввода-вывода.

Из-за специфики работы блока индикации отметим, что в качестве его используется программируемая БИС К580ВВ79. Программное управление БИС осуществляется посредством двух портов ввода-вывода, которые она занимает в адресном пространстве портов ввода вывода микропроцессора. Один из портов является командным, т.е. служит для задания режимов работы БИС, другой порт служит для записи кода отображаемого символа в ОЗУ дисплея БИС. В каждой ячейке ОЗУ дисплея хранится код символа для отображения на одном индикаторе АЛС324Б. На рис. 2.1 изображено соответствие битов кода символа отображаемым сегментам индикатора.

 

                                                                                                            а


          h      g      f      e      d       c      b      a                                  f                b

D7

D6

D5

D4

D3

D2

D1

D0


                                                                                                     e                c

                                                                                                                               

                                                                                                             d           h

 

Рис. 2.1. Соответствие разрядов байта кода символа, записываемого  в ОЗУ дисплея, сегментам индикатора

 

 

В соответствии с рис.2.1 составляем таблицу перекодировки символов для отображения на индикаторах (табл. 2.2.).

Таблица 2.2.

Символ

Код символа

Двоичный

Шестнадцатеричный

‘0’

00111111

3F

‘1’

00000110

06

‘2’

01011011

5B

‘3’

01001111

4F

‘4’

01100110

66

‘5’

01101101

6D

‘6’

01111101

7D

‘7’

00000111

07

‘8’

01111111

7F

‘9’

01101111

6F

‘U’

00111110

3E

‘d’

01011110

5E


 

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

При выводе информации на дисплей используем левый вывод (задается записью нуля в командный  порт БИС). Это простейший формат дисплея, в котором каждая позиция дисплея  прямо соответствует адресу ОЗУ  дисплея, т.е. адрес 0 в ОЗУ соответствует самому правому символу, адрес 7 – самому левому. Запись кодов символов в ОЗУ дисплея с нулевой ячейки вызывает заполнение дисплея справа налево. Поэтому, сначала выводим на дисплей дробную часть числа, затем в обратном порядке целую часть, причем младшую цифру целой части выводим с десятичной точкой. В самом конце выводим идентификатор направления изменения веса.

Из-за особенности  аппаратной реализации блоков микроконтроллера (см. п.2.3), адрес порта ввода данных совпадает с адресом порта записи данных в БИС индикации.

По включению  питания или по получении сигнала “сброс”, микропроцессор передает управление на физический адрес FFFF0h. Отсюда следует, что именно по этому адресу должна находится точка входа в программу управления микроконтроллером. Здесь мы размещаем команду безусловного перехода на саму программу. Адрес входа относительно модуля памяти – 1F0h. Поэтому с помощью директивы ORG размещаем по адресу 1F0h команду передачи управления на тело программы.

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

Константа FiguresTable – задает начало таблицы перекодировки символов для вывода на дисплей. Содержит коды символов ‘0’ – ‘9’;

Регистр AX – используется для считывания данных из порта ввода, вывода данных в порт и при проведении арифметических операций;

Регистр BX – содержит величину смещения таблицы перекодировки FiguresTable;

Регистр CX – используется для организации циклов;

Регистр DX – используется для хранения адресов портов ввода-вывода;

Регистр BP – используется для хранения предыдущего значения веса;

Регистр SI – используется для сохранения текущего значения веса;

Регистр DI – выполняет функцию флага направления изменения веса (см. табл. 2.1);

Программное обеспечение  реализовано в формате COM – файла. Листинг программного обеспечения приведен в приложении 3.

Размещение кода программного обеспечения относительно начала модуля памяти приведено на рис. 2.2.

 

 

 

00000100:   8C C8 8E D8 BB 9D 01 BA 02 00 B0 D3 EE 32 C0 EE

00000110:   BA 00 00 ED 25 0F 7F 8B E8 ED 25 0F 7F 3B C5 74

00000120:   F8 77 04 33 FF EB 03 BF 01 00 8B F0 3B C5 74 15

00000130:   77 08 85 FF 74 0D 33 FF EB 07 85 FF 75 05 BF 01

00000140:   00 EB 08 8B EE BA 00 00 ED EB DF BA 02 00 B0 90

00000150:   EE BA 00 00 32 C0 B9 05 00 EE E2 FD BA 02 00 B0

00000160:   90 EE BA 00 00 8B C5 D7 EE 80 FC 64 75 0B B0 BF

00000170:   EE B0 3F EE B0 06 EE EB 12 32 C0 86 C4 B1 0A F6

00000180:   F1 86 E0 0C 80 D7 EE 8A C4 D7 EE 85 FF 74 05 B0

00000190:   3E EE EB AF B0 5E EE EB AA 00 01 E0 FF 3F 06 5B

000001A0:   4F 66 6D 7D 07 7F 6F 00 00 00 00 00 00 00 00 00

000001B0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

000001C0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

000001D0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

000001E0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

000001F0:   FF 2E 99 01

 

Рис. 2.2.

 

 

 

    1. Проектирование структуры блоков микроконтроллера

 

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

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

 

      1. Проектирование структуры блока памяти

 

Анализируя размер программного обеспечения и специфику его  функционирования, приходим к следующим  выводам:

  1. Для хранения кода программы и констант необходим объем постоянного запоминающего устройства (ПЗУ) не меньший 180 байт.
  2. При функционировании, программа, для хранения переменных данных, обходится только регистрами микропроцессора. Следовательно, необходимость включения в блок памяти ОЗУ отсутствует.

Таким образом, блок памяти микроконтроллера должен включать в себя только ПЗУ.

В качестве микросхемы ПЗУ выбираем микросхему КР556РТ11. Эта  микросхема выполнена на основе транзисторно-транзисторной  логики и представляет собой постоянное запоминающее устройство емкостью 1024 бит для хранения и считывания информации в объеме 256 четырехразрядных слов. БИС по входам и выходам совместима с ТТЛ – схемами и имеет тристабильные выходы. Условное графическое изображение (УГО) БИС КР556РТ11 представлено на рис. 2.3.

Проектирование микроконтроллера на микропроцессоре 8086