Учебное пособие современные микропроцессорные системы. Разработка микропроцессорных систем Вст метод проектирования микропроцессорных систем

Учебное пособие современные микропроцессорные системы. Разработка микропроцессорных систем Вст метод проектирования микропроцессорных систем
Учебное пособие современные микропроцессорные системы. Разработка микропроцессорных систем Вст метод проектирования микропроцессорных систем

Процесс проектирования микропроцессорных систем включает три этапа (рис. 1.1): 1) системный; 2) функционально– схемотехнический; 3) отладка и оценка характеристик.

Рис. 1.1. Этапы проектирования МПС

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

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

Важным моментом системного этапа проектирования является выбор элементной базы, базового МПК, т.е. типа микропроцессорного семейства, и других БИС. На основе этого этапа составляется техническое задание (ТЗ).

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

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

1) необходимость совместной разработки и отладки технических средств и программного обеспечения, ориентированного на конкретную структуру технических средств;

2) использование принципиально новых методов и средств разработки и отладки микропроцессорных систем, таких как внутрисхемные эмуляторы, логические и сигнатурные анализаторы, отладочные комплексы и средства автоматизации программирования;

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

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

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

Проектирование системы завершается опытными испытаниями разработанной МПС в системе, для которой она предназначалась, оценкой полученных характеристик. Если результаты оценки не удовлетворяют требованиям ТЗ, то выполняется анализ причин и на его основе – перепроектирование отдельных модулей МПС или всей системы в целом.

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

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

Дальнейшие стадии проектирования выполняются обычно в виде опытно-конструкторских работ и требуют привлечения большого числа исполнителей.

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

К типовым условным операциям относятся команды JZ и JNZ, JC

и JNC. Две последних включены в группу «булевых». В команде CJNE сначала сравниваются, по правилам вычитания целых чисел, два байта

и в соответствии с результатом сравнения устанавливается флаг C. Затем, в случае их несовпадения, выполняется ветвление.

В команде DJNZ в качестве счетчика может использоваться не только один из регистров текущего регистрового банка Rn, n=0...7, но и прямо адресуемая ячейка памяти данных DSEG. При исполнении команды сначала выполняется декремент счетчика и, если содержимое счетчика не равно нулю, ветвление.

3. Проектирование микропроцессорных систем

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

3.1. Этапы проектирования

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

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

сти. На этом этапе явно или неявно формулируются требования к типу

используемого микропроцессора или микроконтроллера.

Этап разработки алгоритма является наиболее ответственным,

поскольку ошибки этого этапа обнаруживаются при испытании закон-

ченного изделия и приводят к дорогостоящей переработке всей МПС.

Прорабатывается несколько вариантов алгоритма, обеспечивающих

выполнение технических требований с использованием наработанных

ранее функционально-топологических модулей. Основные варианты

отличаются соотношением объема программного обеспечения и аппа-

Технические требования к микропроцессорной системе

Коррекция

алгоритма

управления

Разработка алгоритма

Библиотека

функционально-

Разработка структуры аппаратных и

топологических

программных средств

Коррекция

Разработка программы

Разработка аппаратуры

Коррекция

исходного

(исходный текст)

(принципиальныесхемы,

топология плат)

топологии

Трансляция программы

Монтаж макета

Отладка программы

Автономная отладка

на модели

аппаратуры

Совместная отладка программных и аппаратных

средств системы в реальном масштабе времени

Интеграция микропроцессорной системы в изделие

Испытание изделия

Микропроцессорная система, соответствующая тех-

ническим требованиям

ратуры. Критерием выбора является реализация максимального числа функций программным способом при наименьших аппаратных затратах, обеспечивающая заданные показатели быстродействия и надежности в полном диапазоне эксплуатационных воздействий. Часто определяющим требованием является возможность размещения кода программы во внутренней памяти микроконтроллера, что позволяет обеспечить его защиту от несанкционированного доступа. На этом этапе окончательно определяется тип микроконтроллера и важнейших схем обрамления (память, ПЛИС, интерфейс, АЦП, и т. п.).

На этапе разработки структуры МПС окончательно определяет-

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

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

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

та команда и т.д.) и ошибками алгоритма. Содержание этих этапов при разработке программ на языке ассемблера приведено ниже.

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

PCAD и OrCAD (CAD – computer aided design – автоматизированное проектирование). Эффективность работы с ними значительно зависит от имеющегося в распоряжении разработчика объема библиотек используемых элементов.

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

Для локализации динамических ошибок используются логические анализаторы. Логические уровни сигналов системной магистрали или отдельных шин и линий в режиме приема постоянно записываются в память типа FIFO. Прекращение записи производится при появлении выбранного события (совпадение заданного и фактического адреса на ША, кодов команд на ШД или появление короткого импульса помехи). В это время в памяти содержится вся предшествующая данному событию информация. Анализируя предысторию события, записанную в памяти, можно определить и причину появления сбоя в работе МПС. Информация на дисплее может быть представлена в графическом виде, в виде двоичного, шестнадцатеричного кода или мнемоники команд. Логические анализаторы состояний выполняют запись с тактовой частотой МПС. Для фиксации быстро протекающих процессов используются временные логические анализаторы, у которых тактовая частота записи в память значительно превышает тактовую частоту МПС.

Совместная отладка аппаратных и программных средств в реальном масштабе времени выполняется с помощью эмуляторов ПЗУ и внутрисхемных эмуляторов под управлением инструментальной ЭВМ.

Проектирование микропроцессорных систем

Введение

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

В качестве базовой микросхемы для всех приведенных в книге примеров использована микросхема Atmega 128 популярного микропроцессорного семейства AVR фирмы Atmel. Предполагается, что читатель имеет основные представления, как о принципах микропроцессорной техники, так и об особенностях архитектуры этого микроконтроллера.

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

Главная задача языка- однозначно описать последовательность действий, которую должен выполнить микроконтроллер. В тоже время язык должен быть понятен человеку.

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

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

Все языки программирования делятся на две группы:

· языки низкого уровня (машинноориентированные);

· языки высокого уровня.

Типичным примером машинноориентированного языка является язык Ассемблер. В недавнем прошлом язык Ассемблера был единственным языком для программирования микроконтроллеров. В настоящее время для составления программ исподьзуются языки высокого уровня, такие как Бейсик , Си и т.п. Эти языки в свое время были разработаны для больших компьютеров. Но сейчас широко используются и для микроконтроллеров.

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

Глава1. Написание программ для микроконтроллеров

Элементы языка Си

Регистры МК (регистры - это ячейки-байты в памяти МК AVR) в программе на Си имеют названия и так как числа в большинстве из них можно менять - для программы регистры являются по сути переменными.
Переменная - это набор ячеек в памяти в которых можно хранить число или числа и менять их. Переменная имеет адрес и имя.

Константа - это как переменная но менять содержимое нельзя.

Константы

Константами называются перечисленные величины в программе. В языке СИ разделяют четыре типа констант: целые константы, константы с плавающей запятой, символьные константы и строковыми литералы.

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

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

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

Шестнадцатеричная константа начинается с обязательной последовательности 0х или 0Х и содержит одну или несколько шестнадцатеричных цифр (цифры представляющие собой набор цифр шеснадцатеричной системы счисления: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F).

Двоичная константа записывается с помощью двоичных символов, которым должна предшествовать последовательность 0b.

например - Целые числа могут быть записаны:

В десятичной форме: 12 234 -5493

В двоичной форме с префиксом 0b так: 0b101001

В шестнадцатеричной форме с префиксом 0x так: 0x5А

В восьмеричной форме с префиксом 0 так: 0775

Если требуется сформировать отрицательную целую константу, то используют знак "-" перед записью константы (который будет называться унарным минусом). Например: -0x2A, -088, -16 .

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

Десятичные константы рассматриваются как величины со знаком, и им присваивается тип int (целая) или long (длинная целая) в соответствии со значением константы. Если константа меньше 32768, то ей присваивается тип int, в противном случае long.

Восьмеричным и шестнадцатеричным константам присваивается тип int , unsigned int (беззнаковая целая), long или unsigned long в зависимости от значения константы согласно табл1.1.

Таблица 1.1

Диапазон шестнадцатеричных констант Диапазон восьмеричных констант Тип
0x0 - 0x7FFF 0 - 077777 int
0X8000 - 0XFFFF 0100000 - 0177777 unsigned int
0X10000 - 0X7FFFFFFF 0200000 - 017777777777 long
0X80000000 - 0XFFFFFFFF 020000000000 - 037777777777 unsigned long

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

Примеры: 115.75, 1.5Е-2, -0.025, .075, -0.85Е2

Символьная константа - представляется символом заключенном в апострофы. Значением символьной константы является числовой код символа.

Например, "Q"- буква Q .

Символьные константы имеют тип int и при преобразовании типов дополняются знаком.

Строковая константа (литерал) - последовательность символов (включая строковые и прописные буквы русского и латинского а также цифры) заключенные в кавычки (") .

Например, “Heloo”

Символы строкового литерала сохраняются в области оперативной памяти. В конец каждого строкового литерала компилятором добавляется нулевой символ, представляемый управляющей последовательностью \0. Строковый литерал имеет тип char .

1.1.2. Идентификатор

Идентификатором называется последовательность цифр и букв, а также специальных символов, при условии, что первой стоит буква или специальный символ. Для образования идентификаторов могут быть использованы строчные или прописные буквы латинского алфавита. В качестве специального символа может использоваться символ подчеркивание (_). Два идентификатора для образования которых используются совпадающие строчные и прописные буквы, считаются различными. Например: abc, ABC, A128B, a128b .

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

Ключевые слова

Типы данных и их объявление

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

Формат объявления переменных имеет следующий вид:

[]

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

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

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

- разместить переменную в регистрах МК.

Глобальные переменные объявляются до появления их в тексте какой ни будь функции. После объявления глобальные переменные доступны в любой функции программы.

Локальные переменные объявляются в самом начале функций- т.е. после фигурной скобки.

- спецификатор типа данных, которых может хранить переменная.

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

Например,

Unsigned char - хранит число от 0 до 255(байт);

Unsigned Int - хранит число от 0 до 65535 (два байта);

Unsigned long Int- хранит число от 0 до 4294967295 (четыре байта).

Вместо Unsigned char можно писать просто char, так как компилятор по умолчанию считает char , беззнаковым.

Signed char - означает знаковую переменную и хранит число от -128 до 127.

Ключевые слова signed и unsigned указывают как интерпретируется нулевой бит объявляемой переменной, т.е., если указано ключевое слово unsigned (беззнаковый), то нулевой бит интерпретируется как часть числа, в противном случае нулевой бит интерпретируется как знаковый. В случае отсутствия ключевого слова unsigned целая переменная считается знаковой. В том случае, если спецификатор типа состоит из ключевого типа signed или unsigned и далее следует идентификатор переменной, то она будет рассматриваться как переменная типа int. Например:

unsigned int n;unsigned int b;int c; (подразумевается signed int c);unsigned d; (подразумевается unsigned int d);signed f; (подразумевается signed int f).

Переменная любого типа может быть объявлена как немодифицируемая. Это достигается добавлением ключевого слова const к спецификатору-типа. Объекты с типом const представляют собой данные используемые только для чтения, т.е. этой переменной не может быть присвоено новое значение. Отметим, что если после слова const отсутствует спецификатор-типа, то подразумевается спецификатор типа int. Если ключевое слово const стоит перед объявлением составных типов (массив, структура, смесь, перечисление), то это приводит к тому, что каждый элемент также должен являться немодифицируемым, т.е. значение ему может быть присвоено только один раз.

const double A=2.128E-2;const B=286; (подразумевается const int B=286) consnant char_ string constant =”this is a string constant”

Данные плавающего типа

Для переменных, представляющих число с плавающей точкой используются следующие модификаторы-типа: float, double, long double (в некоторых реализациях языка long double СИ отсутствует).

Величина с модификатором-типа float занимает 4 байта. Из них 1 бит отводится для знака, 8 бит для избыточной экспоненты и 23 бита для мантиссы. Отметим, что старший бит мантиссы всегда равен 1, поэтому он не заполняется, в связи с этим диапазон значений переменной с плавающей точкой приблизительно равен от 3.14E-38 до 3.14E+38. Величина типа double занимает 8 байт в памяти. Ее формат аналогичен формату float. Биты памяти распределяются следующим образом: 1 бит для знака, 11 бит для экспоненты и 52 бита для мантиссы. С учетом опущенного старшего бита мантиссы диапазон значений равен от 1.7E-308 до 1.7E+308.

float f, a, b;double x,y;

- имя переменной. Например imy peremennoi.

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

Например, moya peremennaya , _vasha funkzia.

Глобальные переменные, а также локальные переменные с модификатором static при старте и рестарте программы равны 0, если им не присвоили иные значения.

Несколько примеров объявления переменных:

Unsigned Char my_peremen=34 ; /* my_peremen определен как Unsigned Char , с присвоением значения 34 (можно и без присвоения) */

Unsigned Int big_ peremen=34634; /* big_ peremen объявлен как Unsigned Int */.

Объявление массива

Массивы - это группа элементов одинакового типа (double, float, int и т.п.). Из объявления массива компилятор должен получить информацию о типе элементов массива и их количестве. Объявление массива имеет два формата:

спецификатор-типа описатель [константное - выражение];

спецификатор-типа описатель ;

Описатель - это идентификатор массива.

Спецификатор-типа задает тип элементов объявляемого массива. Элементами массива не могут быть функции и элементы типа void.

Константное-выражение в квадратных скобках задает количество элементов массива. Константное-выражение при объявлении массива может быть опущено в следующих случаях:

При объявлении массив инциализируется;

Массив объявлен как формальный параметр функции.

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

Каждое константное выражение в квадратных скобках определяет число элементов по данному измерению массива, так что объявление двухмерного массива содержит два константных выражения, трехмерного – три и т.д. Отметим, что в языке Си первый элемент массива имеет индекс равный 0.

Char mass - нумерация элементов начинается с 0, т.е. элементы данного массива называются как mass, mass и в них хранятся числа 11, 22, 33. Где то в программе элементу можно присвоить значение,например mass=210. Можно элементам не присваивать значения.

Строковая переменная или массив содержащий строку символов, например,

Char stroke =”Hello” определяет 6 элементов, хотя в ней содержится всего пять символов. Шестым элементом является управляющий символ, который добавляется в конце строки \0.

Символьный массив можно объявить также без указания количества элементов.

Например,

Char str =” объявление символьного массива”

Выражения и присваивания

Опепранды и операции

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

В языке СИ присваивание также является выражением, и значением такого выражения является величина, которая присваивается.

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

Чтобы поместить число в переменную (в регистр) в языке Си есть оператор присваивания “ = ”. Этот символ в Си означает вычислить результат того, что справа от оператора присваивания и поместить этот результат в переменную находящуюся левее оператора присваивания.

1.PORTB =PINB +34; /* Эта строчка на Си означает Взять (прочитать) значение переменной (регистра) PINB, затем прибавить к нему число 34 и поместить результат в переменную PORTB */

2. ПЕРЕМЕННАЯ=PINC; /* Эта строчка на Си означает взять (прочитать) значение переменной (регистра) PINC и поместить результат в переменную с именем ПЕРЕМЕННАЯ */
3.Строка где переменная стоит слева от “ = “ но через знак & PORTB& =0x23; на Си означает - прочитать содержимое переменной PORTB, затем выполнить "поразрядное (побитное) логическое И" между прочитанным значением и числом 0x23 и поместить (записать, присвоить) результат в переменную PORTB 4. Строка где переменная стоит непосредственно слева от “=” PORTB=0x23; на Си означает - не читаясодержимое переменной PORTB присвоить ей значение 0x23 уничтожив то что было там раньше.
Вместо & "И" (AND - только 1 и 1 дают 1) могут быть и другие побитные логические операции: | "ИЛИ" (OR только 0 и 0 дают 0) ^ "Исключающее ИЛИ" (XOR изменить бит напротив "1") ~ "инвертирование битов" (INV изменить биты регистра на противоположные символы) и арифметические операции: + - * / %
С оператором присваивания используются сокращения:
ДЛИННАЯ ЗАПИСЬ СМЫСЛ СОКРАЩАЕТСЯ ДО
x = x + 1; добавить 1 x++; или ++x;
x = x - 1; вычесть 1 x--; или --x;
x = x + y; прибавить y x += y;
x = x - y; вычесть y x -= y;
x = x * y; умножить на y x *= y;
x = x / y; поделить на y x /= y;
x = x % y; остаток от деления x %= y;
x--; вычесть 1 x -= 1;
x++; добавить 1 x += 1;

Есть в Си операции которые изменяют значение переменной и без оператора присваивания:

PORTA++; /* Эта строчка на Си означает Взять значение переменной PORTA добавить к ней 1 и записать результат обратно в PORTA .Говорят: Инкрементировать регистр PORTA */

PORTC--; /* Эта строчка на Си означает обратное действие! Декрементировать - вычесть 1 из значения регистра PORTC */

Когда инкремент или декремент используется в выражении то важно где стоят два знака + или - перед переменной или после переменной:

a=4; b=7; a = b++;/* Эта строчка на Си означает: взять значение переменной b присвоить его переменной a затем добавить 1 к переменной b и сохранить результат в b.Теперь a будет содержать число 7 , bбудет содержать число 8 */ a=4; b=7; a = ++b;/* Эта строчка на Си означает: взять значение переменной b затем добавить к нему 1 и сохранить результат в b и этот же результат присвоить переменной a.Теперь a будет содержать число 8 и bбудет содержать число 8 */ 1.2.2 Арифметические операции в Си x + y// сложениеx - y// вычитаниеx * y// умножение x / y/* деление. Если числа целые результат - целое число с отброшенной дробной частью - не округленное. Т.е. если в результате деления получается 6.23411 или 6.94 то результат будет просто целое число 6. Если числа с плавающей точкой, то есть float или double и записываются с точкой и числом после точки, то и результат будет число с плавающей точкой без отбрасывания дробной части 131.9739 / 6.18 даст 21.355 */ x % y// вычислить остаток от деления нацело Примеры:

x < y // X меньше Y
x > y // больше
x <= y // меньше или равно
x >= y // больше или равно
x == y // равно
x != y /* не равно Результат выполнения этих операторов: "истина" это "1" (точнее "не ноль"), "ложно" это "0". Значения хранимые в переменных (в регистрах)
х
и у НЕ изменяются. Берутся (считываются) значения хранящиеся (или содержащиеся) в переменных и сравниваются */

1.2.5.Логические операции:

|| // "ИЛИ" - только "ложь" и "ложь"

// дают "ложь"

&& // "И" - только "истина" и "истина"
// дают "истина"

! // "НЕ" - логическое отрицание

В результате логической операции получается НЕ ЧИСЛО, а логическое значение "истина" или "ложь".

Для логических операций && и || берутся результаты выражений слева и справа от знака операции преобразованные в "истину" или "ложь" и определяется логический результат операции.

Компилятор результат "истина" превращает в 1 а не в любое отличное от 0 число.

Логические операции могут объединять несколько проверяемых условий.

Например:

if ((выражение1)&&((выражение2)||(выражение3)))
{ /* Код программы здесь будет выполняться если:

Выражение1 "Истина" (значит не ноль) и хотя бы одно из выражений 2 и 3 тоже "Истина" (значит не ноль).
} ;

1.3. Используемые конструкции на Си

1.if (){}else {}; идеальная конструкция если нужно выполнить какую то часть программы при наличии каких либо условий или при их отсутствии:

}else { не обязательный элемент конструкции, без него конструкция выглядит так:

if (выражение ) { код на Си /* делать этот код если выражение "истина" - т.е. результат его вычисления не ноль */
};

if (PINB.5) { выполнепние кода Си };
/* если на ножке PB5 есть "1" (не "0" значит "истинно") то программа выполнит код , а если на ней "0" (значит "ложно") то не сделает, а просто пойдет дальше, на следующую строку */

2.while (){};условный цикл (цикл с условием) - используется если нужно выполнять какой то код программы пока выполняется (существует,
"истино" - значит "не ноль") некоторое условие, результат вычисления выражения:

while (выражение) {код на Си /* выполнить этот код если выражение "истина" - т.е. результат его вычисления не ноль. Пока выполняется этот код выражение не проверяется на истинность.После выполнения кода происходит переход к строке while снова проверять истинность выражения */
};

Например:

while (PINA.6) { выполнение кода Си };
/* пока на ножке PA6 есть "1" (не "0" значит "истинно") то программа выполнит код, и опять проверит что на PA6 */ Если бит_6 стал "0" то программа пойдет дальше не выполняя того что в { }

Цикл while имеет вариант

Do - while

при котором код в { } выполняется по меньшей мере один раз независимо от истинности условия в скобках:

do{код на Си /* выполнить этот код один раз затем, если выражение есть "истина" - т.е. результат его вычисления не ноль - опять выполнить код с начала, и так до тех пор пока выражение истина */ } while (выражение); Циклы for(;;) и while() часто используют вот так: while(1); for (;;); /* Так написанные эти циклы означают: МК выполнять эту строчку пока есть питание, нет сброса и нет прерывания. Когда возникает прерывание, программа переходит на обработчик прерывания и (если в обработчике нет перехода в другое место программы) по завершении кода обработчика опять возвращается в этот цикл. */ while(1){ код программы }; for (;;){ код программы }; 4.for(;;){}; - этот цикл позволяет выполнить часть программы нужное число раз:

char i; /* объявление переменной для for это обычная переменная Си и следовательно может иметь любое допустимое имя по вашему желанию и тип */

for (i=5; i<20; i+=4) {
код на Си /* Вначале будет определено "истинно" или "ложно" контрольное выражение i<20. Так как переменной i присвоено значение 5 то контрольное выражение "истинно" и код цикла for будет первый раз выполнен для i=5, затем по выражению i+=4, i станет 9 , теперь снова будет проверена истинность (справедливость, выполнение) контрольного выражение i<20 и так как 9<20 код цикла for будет выполнен еще раз но для i=9. Так будет происходить до тех пор пока результат вычисления контрольного выражения даёт "истинно". Когда результат станет "ложно" - программа выйдет из цикла for не исполняя код. */
};

i = 5 это начальное выражение, то что в начале будет в переменной i. Число 5 просто для примера, может быть таким, как позволяет объявление типа переменной i , в нашем случае это char в большинстве компиляторов по-умолчанию это без знаковый символьный тип - он может хранить числа от 0 до 255

i < 20 - контрольное выражение. Может быть с разными операторами отношения, важно лишь чтобы по ходу цикла оно становилось когда-то "ложью" - иначе цикл "зациклится" т.е. никогда не кончится.

i += 4 - это счетчик или изменение переменной цикла. Обычно это i++ т.е. к переменной добавляется 1 каждый "прогон" цикла. Но опять же может быть таким, какое вам требуется.

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

Контрольное выражение - определяет до каких пор будет выполнятся цикл.

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

Выражение - может быть не просто переменная, а функция других переменных, например:

i =(7 + i*4) или i = (функция других переменных).

5. switch (){}; - оператор множественного выбора, позволяет сделать выбор из нескольких вариантов.

Выражение, следующее за ключевым словом switch в круглых скобках, может быть любым выражением, допустимыми в языке СИ, значение которого должно быть целым. Значение этого выражения является ключевым для выбора из нескольких вариантов. Тело оператора switch состоит из нескольких операторов, помеченных ключевым словом case с последующим константным-выражением. Все константные выражения в операторе switch должны быть уникальны. Кроме операторов, помеченных ключевым словом case, может быть, но обязательно один, фрагмент помеченный ключевым словом default. Список операторов может быть пустым, либо содержать один или более операторов. Причем в операторе switch не требуется заключать последовательность операторов в фигурные скобки.

Схема выполнения оператора switch следующая:

Вычисляется выражение в круглых скобках;

Вычисленные значения последовательно сравниваются с константными выражениями, следующими за ключевыми словами case;

Если одно из константных выражений совпадает со значением выражения, то управление передается на оператор, помеченный соответствующим ключевым словом case;

Если ни одно из константных выражений не равно выражению, то управление передается на оператор, помеченный ключевым словом default, а в случае его отсутствия управление передается на следующий после switch оператор.

Все операторы, между начальным оператором и концом тела, выполняются вне зависимости от ключевых слов, если только какой-то из операторов не передаст управления из тела оператора switch. Таким образом, программист должен сам позаботится о выходе из case, если это необходимо. Чаще всего для этого используется оператор break.

switch (выражение) {

case 5 : код на Си
/* этот код будет выполняться если результат вычисления выражения равен числу 5 на этом работа оператора switch закончится */
break;

case -32 : код на Си
/* этот код будет выполняться если результат вычисления выражения равен отрицательномц числу -32. На этом работа оператора switch закончится */
break;

case "G" : код на Си
/* этот код будет выполняться если результат вычисления выражения равен числу соответствующему символу G в таблице ASCII .На этом работа оператора switch закончится */
break;

default: код на Си
/* этот код будет выполняться если результат вычисления выражения не равен ни 5 ни -32 ни "G", а так же после выполнения кода не
имеющего в конце break;

На этом работа оператора switch закончится */
};

/* switch закончен - выполняется дальнейший код программы */

case - может быть столько сколько требуется, чтобы программа работала быстрее наиболее вероятные варианты следует располагать выше.

default - не обязателен. Его можно расположить и не в конце.

break; - если его не использовать то найдя нужный вариант программа будет выполнять и следующие ниже условия case .

6.goto - оператор безусловного (немедленного) перехода.

Оператор goto передает управление на оператор, помеченный меткой имя-метки. Помеченный оператор должен находиться в той же функции, что и оператор goto, а используемая метка должна быть уникальной, т.е. одно имя-метки не может быть использовано для разных операторов программы. Имя-метки - это идентификатор. какой-то код нашей программы на Си... mesto_5:/* сюда мы попадем после выполнения строки программы goto mesto_5 */ код будет выполнятся после goto mesto_5; ... какой-то код нашей программы на Си... mesto_1:/* сюда мы попадем после выполнения строки программы goto mesto_1 */ код будет выполнятся после goto mesto_1; ... какой-то код нашей программы на Си... goto mesto_1;/* перейти в то место программы где в начале строки написано mesto_1: */ ... какой-то код нашей программы на Си... goto mesto_5;/* перейти в то место программы где в начале строки написано mesto_5: */ ... какой-то код нашей программы на Си.

Пример программы на Си

/*пункт 1 заголовок программы

Он оформляется как комментарий, и обычно содержит информацию

О названии, назначении, версии и авторе программы
- краткое описание алгоритма программы
- пояснения о назначении выводов МК и режиме его работы, фьюзы
- компилятор, инструменты и их версии
- другие сведения которые вы считает полезным указать

// пункт 2 включение внешних файлов

#include

/* перед компиляцией, препроцессор компилятора вставит вместо этой строчки содержимое (текст) заголовочного файла "хидера" mega16.h - этот файл содержит перечень регистров имеющихся в МК ATmega16 и соответствие их названий их физическим адресам в МК. Следует указать какой МК вы используете в свойствах проекта в компиляторе */

#include
/* перед компиляцией, препроцессор компилятора вставит вместо этой строчки текст "хидера" delay.h - этот файл содержит функции для создания пауз в программе. Теперь чтобы сделать паузу вам нужно лишь написать: */

/* сделать паузу N (число) микросек. Это должна быть константа - НЕ переменная!!!
например:

delay_us(12 + 7*3);
delay_us(117);

delay_ms(x); /* сделать паузу x милиСек
x - может быть переменная, выражение или число
от 0 до 65535 (тип unsigned int )
например:

delay_ms(3280);
delay_ms(переменная);
delay_ms(переменная*4 + 760); */

//пункт 3 определения пользователя

#define ADC_BUSY PINB.0
#define NCONVST PORTB.1
/* после этих двух строк, перед компиляцией, препроцессор компилятора заменит в тексте программы ADC_BUSY на PINB.0 и NCONVST на PORTB.1
Таким образом вместо того что бы помнить что вывод занятости AD7896 подключен у вас к ножке PB0 вы можете проверять значение осмысленного понятия ADC_BUSY - "АЦП занят" . А вместо управления абстрактной ножкой PB1 (через PORTB.1) вы можете управлять - NCONVST - "стартовать новое АЦ преобразование".

#define - Это удобно! Но ВОВСЕ не обязательно.
*/

Например:

#define invbit(p,n) (p=p^bit(n))

Здесь переменные величины это "p" и "n". Теперь для инвертирования бита 5 в регистре PORTB вам достаточно написать в программе:

invbit(PORTB ,5);

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

Алгоритм

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

Програма на языке Си

При создании программы на языке С мы используем компилятор C PRO for AVR. Это програмная среда специально предназначена для разработки программ на языке С для микроконтроллеров AVR.

Любая современная среда программирования работает не просто с текстом программы, а с так называемым проектом .

Задача программиста лишь написать текст программы, для которого в проекте отводится отдельный файл с расширением “с”. Компилятор переводит исходную программу в шестнадцатеричную систему (создает Hex - файл) для занесения (прошивки) ее в память микроконтроллера.

В дальнейшем мы еще рассмотрим подробно процесс установки и работу с программной средой C PRO for AVR. Сейчас же считаем, что она установлена и запущена.

Сразу после запуска компилятора все параметры принимают значения по умолчанию (все внутренние устройства выключены, внутренние порты ввода- вывода настроены на ввод, используется внутренний генератор с частотой тактирования 4МГц).Это соответствует начальному состоянию микропроцессора после системного сброса. Те параметры, которые нам не нужны трогать пока не будем (оставим по умолчанию).

Программа на языке Си выглядит следующим образом:

1 #Include < Atmega 128.h >

2 Bit oldstate ; //флаг старого состояния

3 Void main () {

4 DDB0 bit=0 ; // установка вывода РВ0 как вход

5 DDRC = 0xFF; // конфигурирование РС как вывод

6 PORTC=0xAA; // в порт С записывается исходный код

9 If (Button (& PINB,0,1,1)) { // обнаружение логической единицы

10 Oldstate =1; // обновление флага

11 if (oldstate && Button (& PINB, 0,1,0)) { // обнаружение перехода из 1в 0

12 PORTB= ~ PORTB; //инвертирование PORTC

13 oldstate=0; // обновление флага

14 } While (1); // бесконечный цикл

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

Многопрофильный колледж

Северо-Казахстанского государственного университета

имени академика М. Козыбаева

Пояснительная записка

к курсовому проекту

по дисциплине: «Цифровые устройства и микропроцессорные системы»

на тему: «Проектирование микропроцессорной системы на основе микропроцессора I 8086 »

Вариант № 16

Выполнил: студент гр. РЭС-к-09

Сафронов С.В

Проверил: преподаватель

Михайлова А.Н

Петропавловск 2010

1. Введение

2. Общая структура МПС

3. 16-разрядный микропроцессор i8086

3.1 Система команд

4.Внутренняя структура

5. Устройства памяти

6. ОЗУ. Принципы построения

7.Постоянные запоминающие устройства (ПЗУ)

8.Цифро-аналоговые преобразователи (ЦАП)

9.Разработка функциональной схемы модуля ввода/вывода

10 Заключение

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

Приложение А

1. Введение

Целью дисциплины «Цифровые устройства и микропроцессоры» является изучение принципов построения цифровых устройств различной функциональной сложности – от логических элементов до микропроцессоров и микро - ЭВМ.

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

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

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

2. Общая структура МПС

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

В любой МПС можно выделить следующие основные части (подсистемы):

    процессорный модуль;

  • внешние устройства (внешние ЗУ + устройства ввода/вывода);

    подсистему прерываний;

    подсистему прямого доступа в память.

Рисунок 1 – Структура МПС с интерфейсом "Общая шина"

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

Все сигналы интерфейса делятся на три основные группы – данных, адреса и управления. Многочисленные разновидности интерфейсов "Общая шина" обеспечивают передачу по раздельным или мультиплексированным линиям (шинам). Например, интерфейс Microbus, с которым работают большинство 8-разрядных МПС на базе i8080, передает адрес и данные по раздельным шинам, но некоторые управляющие сигналы передаются по шине данных. Интерфейс Q-bus, используемый в микро-ЭВМ фирмы DEC (отечественный аналог – микропроцессоры серии К1801) имеет мультиплексированную шину адреса/данных, по которой эта информация передается с разделением во времени. Естественно, что при наличии мультиплексированной шины в состав линий управления необходимо включать специальный сигнал, идентифицирующий тип информации на шине. Обмен информацией по интерфейсу производится между двумя устройствами, одно из которых является активным, а другое – пассивным. Активное устройство формирует адреса пассивных устройств и управляющие сигналы. Активным устройством выступает, как правило, процессор, а пассивным – всегда память и некоторые ВУ.

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

3.16-разрядный микропроцессор i8086

Первый 16-разрядный процессор i8086 фирма Intel выпустила в 1978 году. Частота - 5 Мгц, производительность - 0,33 MIPS для инструкций с 16-битными операндами (позже появились процессоры 8 и 10 МГц). Технология 3 мкм, 29 000 транзисторов. Адресуемая память 1 Мбайт. Через год появился i8088 - тот же процессор, но с 8-разрядной шиной данных. С него началась история IBM PC, неразрывно связанная со всем дальнейшим развитием процессоров Intel, Массовое распространение и открытость архитектуры IBM PC привели к лавинообразным темпам появления нового программного обеспечения, разрабатываемого крупными, средними и мелкими фирмами, а также энтузиастами-одиночками. Технический прогресс тогда и сейчас был бы немыслим без развития процессоров, но, с учетом огромного объема уже существующего программного обеспечения для PC, уже тогда возник принцип обратной программной совместимости - старые программы должны работать на новых процессорах. Таким образом, все нововведения в архитектуре последующих процессоров должны были пристраиваться к существующему ядру.

16-разрядный МП i8086 явился дальнейшим развитием линии однокристальных МП, начатой i8080. Наряду с увеличением разрядности в i8086 реализован ряд новых архитектурных решений:

расширена система команд (по набору операций и способам адресации);

архитектура МП ориентирована на мультипроцессорную работу. Разработана группа вспомогательных БИС (контроллеров и специализированных процессоров) для организации мультимикропроцессорных систем различной конфигурации;

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

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

введена новая (по сравнению с i8080) организация памяти, которая далее использовалась во всех старших моделях семейства INTEL - сегментация памяти. Для сохранения преемственности модели с i8080 в i8086 предусмотрено два режима работы - "минимальный" и "максимальный", причем в минимальном режиме i8086 работает просто как достаточно быстрый 16-разрядный i8080 с расширенной системой команд (архитектура МПС на базе i8086-min напоминает архитектуру на базе i8080).

Максимальный режим ориентирован на работу i8086 в составе мультимикропроцессорных систем, в которых, помимо нескольких центральных процессоров i8086, могут функционировать специализированные процессоры ввода/вывода i8089, сопроцессоры "плавающей арифметики" i8087. Определим более четко введенные выше понятия:

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

3.1 Система команд

В системе команд микропроцессора 8086 насчитывалось 98 инструкций: 19 команд передачи данных, 38 команд обработки данных, 24 команды различных условных и безусловных переходов и 17 команд управления ЦПУ.

Каждая команда состояла из кода операции (так называемый опкод) и операндов. Обычно на опкод отводился первый байт команды и три средних бита второго байта или же (в случае однобайтной команды) старшая часть первого байта команды. Всего же различных вариантов команд в i8086 насчитывается почти 4000.

По назначению команды микропроцессора I8086 разделяют на 6 групп:

1 Команды передачи данных: MOV, XCHG, PUSH, POP, PUSHF, POPF, LEA, LDS, LES, LAHF, SAHF, XLAT, IN.

2 Арифметические команды: ADD, ADC, INC, AAA, DAA, SUB, SBB, DEC, NEG, CMP, AAS, DAS, MUL, IMUL, DIV, IDIV, AAM, AAD.

3 Логические команды: NOT,SHL / SAL,SHR,SAR,ROL,ROR,RCL,RCR,

AND, TEST,OR,XOR.

4 Команды манипуляции цепочками: CMPS, LODS, MOVS, REP, SCAS, STOS.

5 Команды передачи управления: JMP, CALL, RET, LOOP/LOOPE, LOOPZ, LOOPNE/LOOPNZ, JCXZ, JE/JZ, JNE/JNZ, JL/JNGE, JLE/JNG, JB/JNAE, JBE/JNA, JP/JPE, JNP/JPO, JO, JNO, JS, JNS, JG/JNLE, JGE/JNL, JA/JNBE, JAE/JNB.

6 Команды управления процессором: CLC, CMC, STC, CDL, STD, CLI, HLT WAIT, ESC , LOCK

4.Внутренняя структура

Структурная схема МП i8086 представлена на рис. МП включает в себя три основных устройства:

УОД - устройство обработки данных;

УСМ - устройство связи с магистралью;

УУС - устройство управления и синхронизации.

УОД предназначено для выполнения команд и включает в себя 16-разрядное АЛУ, системные регистры и другие вспомогательные схемы; блок регистров (РОН, базовые и индексные) и блок микропрограммного управления.

УСМ обеспечивает формирование 20-разрядного физического адреса памяти и 16-разрядного адреса ВУ, выбор команд из памяти, обмен данными с ЗУ, ВУ, другими процессорами по магистрали. УСМ включает в себя сумматор адреса, блок регистров очереди команд и блок сегментных регистров.

УУС обеспечивает синхронизацию работы устройств МП, выработку управляющих сигналов и сигналов состояния для обмена с другими устройствами, анализ и соответствующую реакцию на сигналы других устройств МПС.

МП может работать в одном из двух режимов - "минимальном" (min) и "максимальном" (max). Минимальный режим предназначен для реализации однопроцессорной конфигурации МПС с организацией, подобной МПС на базе i8080, но с увеличенным адресным пространством, более высоким быстродействием и значительно расширенной системой команд. Максимальная конфигурация предполагает наличие в системе нескольких МП и специального блока арбитра магистрали (используется интерфейс Multibus).

На внешних выводах МП i8086 широко используется принцип мультиплексирования сигналов - передача разных сигналов по общим линиям с разделением во времени. Кроме того, одни и те же выводы могут использоваться для передачи разных сигналов в зависимости от режима (min - max).проектирование аппаратной части... курсовом проекте реализована микропроцессорная система на базе микроконтроллера - ... работы устройства На основе функций устройства...

  • Проектирование микропроцессорных устройств обработки данных

    Другое >> Информатика, программирование

    Курсового проектирования является система сбора и обработки данных, реализуемая на основе современной элементной базы - микропроцессорных ... на основе других МП аналогична, хотя и имеет некоторые особенности, связанные с отличиями архитектур микропроцессоров ...

  • Микропроцессорные системы

    Отчет по практике >> Информатика

    По учебной практике «Микропроцессорные системы» Вариант №1 Выполнил... ЭВМ для автоматизированного проектирования , научных исследований, ... которому необходимо знать основы организации и функционирования универсальных... курсор вправо на одну позицию. На символ...

  • Аппаратно-программные средства периферийных устройств системы сбора показаний счетчиков тепловой

    Реферат >> Информатика

    Сравнимых с 16-разрядными микропроцессорами и микроконтроллерами по производительности и... вычислительной техники Для проектирования на основе вычислительных машин на­дежных... пайки способ построения микропроцессорной системы на основе AVR - это приобретение...

  • Качественные и количественные изменения элементной базы средств ВТ привели к

    изменению сложившихся принципов их проектирования (таких, как жесткая

    структура, последовательное центральное управление, линейная организация

    памяти и отсутствие возможности адаптации структуры ЭВМ к особенностям

    решаемой задачи).

    На смену классическим фоннеймановским принципам организации вычислительных систем пришли идеи проблемной ориентации МПС, параллельной и конвейерной обработки информации, использование табличных методов обработки данных, принципы регулярности и однородности структур МПС; становится реальной

    возможностью идея создания адаптивно-перестраиваемых систем, а также

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

    время при проектировании вычислительных систем на основе МПС получил

    применение так называемый принцип «3М»: модульность, магистральность,

    микропрограммируемость.

    Принцип модульной организации предполагает построение вычислительных и

    управляющих МПС на основе набора модулей: конструктивно, функционально и

    электрически законченных вычислительных устройств, позволяющих самостоятельно

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

    подход при проектировании микроЭВМ и систем позволяет (при реализации как

    универсальных, так и специализированных модулей) обеспечить создание семейств

    (рядов) МПС, отличающихся функциональными возможностями и характеристиками,

    перекрывающими значительный диапазон применений, способствует сокращению

    затрат на проектирование, а также упрощает наращивание мощности и

    реконфигурацию систем, отодвигает время морального старения вычислительных

    Магистральный способ обмена информацией в отличие от способа организации

    произвольных связей (по принципу «каждый с каждым») позволяет упорядочить и

    минимизировать число связей в МПС. Он обеспечивает обмен информацией между

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

    магистралей, объединяющих входные и выходные шины. Различают одно-, двух-,

    трех- и многомагистральные связи. Необходимо отметить взаимосвязь

    схемотехнических и структурных решений, которые проявляются при реализации

    данного способа обмена в виде создания специальных двунаправленных буферных

    каскадов с тремя устойчивыми состояниями и использовании временного

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

    Микропрограммное управление обеспечивает наибольшую гибкость при организации

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

    МПС, а также использовать в них макрооперации, что эффективнее использования


    стандартных подпрограмм. Кроме этого, передача управляемых слов в виде

    зашифрованных кодовых последовательностей соответствует условиям минимизации

    числа выводов СБИС и сокращению числа межсоединений в модулях.

    Кроме перечисленных выше основных особенностей проектирования МПС, следует

    отметить принцип регулярности, который предполагает закономерную

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

    принципа позволяет увеличить интегральную плотность, уменьшить длину связей

    на кристалле, сократить время топологического и схемотехнического

    проектирования БИС и СБИС, уменьшить число пересечений и типов функциональных

    и конструктивных элементов.

    При разработке архитектуры МПС (системный этап) необходимо решить следующие

    Дать описание концептуальной структуры функционального поведения системы с

    позиций учета интересов пользователя при ее построении и организации

    вычислительного процесса в ней;

    Определить структуру, номенклатуру и особенности построения программных и

    микропрограммных средств;

    Описать характеристики внутренней организации потоков данных и управляющей

    информации;

    Провести анализ функциональной структуры и особенности физической

    реализации устройств системы с позиции сбалансированности программных,

    микропрограммных и аппаратурных средств.

    Основные этапы проектирования МПС приведены на рис. 3.1.

    На начальной стадии проектирования МПС может быть описана на одном из

    следующих концептуальных уровней: “черный ящик”, структурный, программный,

    логический, схемный.

    На уровне “черного ящика” МПС описывается внешними спецификациями, где

    перечисляются внешние характеристики.

    Рис. 3.1. Этапы проектирования МПС

    Структурный уровень создается аппаратными компонентами МПС, которая

    описывается функциями отдельных устройств, их взаимосвязью и информационными

    потоками.

    Программный уровень разделяется на два подуровня (команд процессора и

    языковый) и МПС интерпретируется как последовательность операторов или

    команд, вызывающих то или иное действие над некоторой структурой данных.

    Логический уровень присущ исключительно дискретным системам и разделяется на

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

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

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

    операторами и путями передачи данных, вторая обеспечивает зависящие от

    времени сигналы, инициирующие пересылку данных между регистрами.

    Схемный уровень базируется на описании работы элементов дискретных устройств.

    В жизненном цикле МПС, как и любой дискретной системы, выделяются три стадии:

    проектирование, изготовление и эксплуатация.

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

    Субъективные неисправности делят на проектные и интерактивные. Проектные

    неисправности вызваны недостатками, вносимыми в систему на различных стадиях

    реализации исходного задания. Интерактивные неисправности возникают в

    процессе работы по вине обслуживающего персонала (оператора). Результатом

    проявления неисправности является ошибка, причем одна неисправность может

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

    множеством неисправностей.

    Существует также понятие дефекта - физическое изменение параметров

    компонентов системы, выходящих за допустимые пределы. Дефекты называют

    сбоями, если они носят временный характер, и отказами, если они постоянны.

    Дефект не может быть обнаружен до тех пор, пока не будут созданы условия для

    возникновения из-за него неисправности, результат которой должен быть, в свою

    очередь, передан на выход исследуемого объекта для того, чтобы сделать

    неисправность наблюдаемой.

    Диагностика неисправности – процесс определения причины появления ошибки по

    результатам тестирования.

    Отладка – процесс обнаружения ошибок и определения

    источников их появления по результатам тестирования при проектировании МПС.

    Средствами отладки являются приборы, комплексы и программы. Иногда под

    отладкой понимают обнаружение, локализацию и устранения неисправности. Успех

    отладки зависит от того, как спроектирована система, предусмотрены ли

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

    для отладки.

    Для проведения отладки проектируемая МПС должна обладать

    свойствами управляемости, наблюдаемости и предсказуемости.

    Управляемость – свойство системы, при котором ее поведение поддается

    управлению, т.е. имеется возможность остановить функционирование системы в

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

    Наблюдаемость – свойство системы, позволяющее проследить за поведением

    системы, за сменой ее внутренних состояний.

    Предсказуемость – свойство системы, позволяющее установить систему в

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

    МПС по своей сложности, требованиям и функциям могут значительно отличаться

    эксплуатационными параметрами, объемом программных средств, типом

    микропроцессорного набора и т.д. В связи с этим процесс проектирования может

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

    Процесс проектирования – итерационный процесс. Неисправности, обнаруженные на этапе приемосдаточных испытаний, могут привести к коррекции спецификации, а

    следовательно, к началу проектирования всей системы. Обнаруживать

    неисправности необходимо как можно раньше; для этого надо контролировать

    корректность проекта на каждом этапе разработки. Существуют следующие методы

    контроля правильности проектирования: верификация (формальные методы

    доказательства корректности проекта); моделирование; тестирование.

    В последнее время появилось много работ по верификации программного

    обеспечения, микропрограмм, аппаратуры. Однако эти работы пока носят

    теоретический характер. Поэтому на практике чаще используют моделирование

    поведения объекта и тестирование на различных уровнях абстрактного

    представления системы.

    На этапе формализации требований к системе контроль корректности проекта

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

    не могут быть формализованы в принципе. Функциональная спецификация может

    анализироваться коллективом экспертов или моделироваться и проверяться в

    опытном порядке для выявления достижения желаемых целей. После утверждения

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

    предназначенных для установления правильности работы системы в соответствии с

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

    основанные на этой спецификации и дающие возможность проверки любой

    реализации системы, которая объявляется способной выполнять функции,

    оговоренные в спецификации. Этот способ – полная противоположность другим,

    где тесты строятся применительно к конкретным реализациям. Однако на практике

    разработке тестов часто присваивают более низкий приоритет по сравнению с

    проектом, поэтому тестовые программы появляются значительно позже его