|
Контроллеры
Одной из характерных особенностей
нынешнего этапа научно-технического прогресса является все более широкое
применение микроэлектроники в различных отраслях народного хозяйства. Роль
микроэлектроники в развитии общественного производства определяется ее
практически неограниченными возможностями в решении различных задач во всех
областях народного хозяйства, глубоким влиянием на культуру и быт современного
человека. Особое внимание в настоящее время уделяется внедрению
микропроцессоров, обеспечивающих решение задач автоматизации управления
механизмами, приборами ' и аппаратурой. Адаптация микропроцессора к особенностям
конкретной задачи осуществляется в основном путем разработки соответствующего
программного обеспечения, заносимого затем в память программ. Аппаратная
адаптация в большинстве случаев осуществляется путем подключения необходимых
интегральных схем обрамления и организации ввода-вывода, соответствующих
решаемой задаче. В микропроцессорной технике выделился самостоятельный класс
больших интегральных схем (БИС) - однокристальные микроЭВМ (ОМЭВМ), которые
предназначены для "интеллектуализации" оборудования различного назначения.
Архитектура однокристальных микроЭВМ - результат эволюции архитектуры
микропроцессоров и микропроцессорных систем, обусловленной стремлением
существенно снизить их аппаратные затраты и стоимость. Как правило, эти цели
достигаются как путем повышения уровня интеграции БИС, так и за счет поиска
компромисса между стоимостью, аппаратными затратами и техническими
характеристиками ОМЭВМ. ОМЭВМ представляют собой приборы, конструктивно
выполненные в виде одной БИС и включающие в себя все устройства, необходимые для
реализации цифровой системы управления минимальной конфигурации: процессор,
запоминающее устройство данных, запоминающее устройство команд, внутренний
генератор тактовых сигналов, а также программируемые интегральные схемы для
связи с внешней средой. Использование ОМЭВМ в системах управления обеспечивает
достижение исключительно высоких показателей эффективности при столь низкой
стоимости (во многих применениях система может состоять только из одной БИС
ОМЭВМ), что им, видимо, нет в ближайшем времени альтернативной элементной базы
для построения управляющих и/или регулирующих систем, В настоящее время более
двух третей мирового рынка микропроцессорных средств составляют именно БИС
ОМЭВМ. В некоторых публикациях однокристальную микроЭВМ (ОМЭВМ) называют
"микроконтроллер". Обосновывается это тем обстоятельством, что такие микросхемы
имеют незначительные емкости памяти, физическое и логическое разделение памяти
программ (ПЗУ) и памяти данных (ОЗУ), упрощенную и ориентированную на задачи
управления систему команд, примитивные методы адресации команд и данных.
Специфическая организация ввода-вывода информации предопределяет область их
применения в качестве специализированных вычислителей, включенных в контур
управления объектом или процессом. Структурная организация, набор команд и
аппаратно-программные средства ввода-вывода информации этих микросхем лучше
всего приспособлены для решения задач управления и регулирования в приборах,
устройствах и системах автоматики, а не для решения задач обработки данных.
Указанные выше соображения отражают технический уровень ОМЭВМ в настоящий
момент. Ускорение научно-
технического прогресса и совершенствование хозяйственного механизма тесно
связаны с развитием новейшей информационной технологии. Тенденция к большей
децентрализации функций управления объективно требует совершенствования
непосредственно рабочих мест пользователей, вовлеченных в процесс управления,
прежде всего за счет их автоматизации. Очевидно, что без конкретных потребностей
(например, в повышении производительности интеллектуального уровня личного
труда, выполнение работы быстрее и экономичнее) едва ли возникла бы
необходимость в контроллерах. Внедрение контроллеров позволяет реализовать
качественно новую информационную технологию, при которой потребитель информации
получает и анализирует интересующие его данные непосредственно в процессе
общения с ПЭВМ, что обеспечивает комплексную автоматизацию конкретных задач
управления. Работа контроллера помогает лучшему осознанию проблемной ситуации,
позволяет частично или полностью решить проблему, подталкивает к оперативному
построению модели объекта управления и, тем самым, к грамотному и быстрому
принятию решений. схемотехнических и
программных средств, обеспечивающих работу пользователей в некоторой предметной
области. Все три компонента совершенно необходимы для функционирования
контроллера. Методика проектирования контроллера не может не быть связанной с
методикой его функционирования, так как функционирование развитого контроллера
не предусматривает возможность его развития самими пользователями. Языковые
средства микроконтроллеров являются реализацией методических средств с точки
зрения конечного пользователя, и дают возможность конечному пользователю
производить все необходимые действия. обучения, диапазон которых может быть очень широк: от
бумажных инструкций до самообучающихся систем. Их назначение заключается в том,
чтобы пользователь научился эффективно работать в условиях автоматизации полного
и частного процесса. Если процесс достаточно сложный, а пользователь не имеет
специализированные навыков, возможно применение контроллеров, которые позволяют
постепенно ввести пользователя в предметную область его автоматизированного
процесса. Чем более сложнее проектируется контроллер, тем менее функции могут
быть реализованы пользователем. Следующий аспект методического обеспечения -
это реализация заданных функций контроллера, т.е.собственно его
функционирования. Здесь необходимы методики определения цели текущей
деятельности, информационной потребности, всевозможных сценариев для описания
процессов ее реализации. Эти методические средства могут явным или неявным
образом учитываться пользователем. В первом случае пользователь в значительной
степени сам планирует свою деятельность. Языковые средства контроллера
необходимы, прежде всего, для однозначного смыслового соответствия действий
пользователя и реакции ПЭВМ. Без них невозможен процесс обучения, организация
диалога, обнаружение и исправление ошибок. Сложность разработки таких языков
заключается в том, что они должны быть преимущественно непроцедурными. Если
процедурный язык указывает, как выполняется задаваемое, то непроцедурный - что
необходимо выполнить без детализации того, какие действия для этого требуются.
Так как конечные пользователи не знают в деталях процесс реализации
информационной потребности, чем выше интеллектуальность контроллера, тем больше
непроцедурных возможностей должно быть предусмотрено в его языках. Языки
программирования контроллера должны быть пользователь ориентированными, в том
числе и профессионально-ориентированными. Это связано с различиями в
классификации пользователей. Следует учесть, что использование естественного
языка, не может дать сколько-нибудь ощутимых преимуществ из-за необходимости
введения через клавиатуру громоздких конструкций ради получения иногда несложных
результатов. Кроме того, затраты на построение лексического анализатора для
такого контроллера могут сравняться с общими затратами на все остальные
составляющие. Как и во всяком языке, основу языков контроллеров должны
составлять заранее определяемые термины, а также описания способов, с помощью
которых могут устанавливаться новые термины, заменяя или дополняя существующие.
Указанное обстоятельство приводит к необходимости при проектировании контроллера
определенным образом классифицировать терминологическую основу контроллеров,
т.е. определить все основные синтаксические конструкции языка и семантические
отношения между терминами и их совокупностями. В связи с этим может возникнуть
необходимость в простейшей классификации контроллеров, например, по возможностям
представления данных в некоторых пользовательских режимах обработки: числовые,
текстовые и смешанные. Возможности языка во многом определяют и список правил,
по которым пользователь может строить формальные конструкции, соответствующие
реализации информационной потребности. Резко возросшая потребность в
малоразмерной авиационной техники послужила толчком для развития авиационного
оборудования в направлении уменьшения его габаритно-массовых характеристик . Современные нормы летной годности, как отечественные НЛГС-3, так и зарубежные
FAR-23, предъявляют высокие требования к безопасности полетов, что напрямую
связано с надежностью применяемого оборудования, резервированием основных
каналов информации и предоставлением пилоту ограничительных сигналов при
возможно минимальном весе оборудования. Поэтому тема дипломной работы,
направленной на создание указателя скорости с цифровым выходом УСВИЦ-250,
является весьма актуальной. На основании обзора методов измерения
воздушных скоростей и обзора последних разработок указателей скорости
разработана конструкция указателя, в которой использованы оригинальные
технические решения, примененные в указателях УСВИ-200 –Э (подвижный индекс
Vм.д.), УСБС-200-Э (выдача разовой команды Vпр=Vм.д.) и УСЦ-2 (наличие цифрового
выхода Vпр.ц.). Возвращаясь к
языково-программным классификационным характеристикам, нельзя не упомянуть о
средствах разработки контроллера, т.е. о языках программирования. -
автокод (язык ассемблера); - языки высокого уровня (процедурные языки -
BASIC, FORTRAN, PASCAL, C, MODULA-2, ADA; и языки исскуственного интеллекта -
LISP, PROLOG, SMALLTALK, OCCAM). Более
понятные для ЭВМ - это так называемые машинно-ориентированные языки (машинный
код и язык ассемблера). Более понятные для человека именуют языками высокого
уровня. Программное обеспечение на машинно-ориентированном языке экономично в
эксплуатации, однако сравнительно высокая трудоемкость и длительность разработки
программного обеспечения обуславливают преимущественное применение их для
создания и развития программного обеспечения драйверов и операционных систем с
целью наилучшего использования аппаратных особенностей каждой конкретной
ЭВМ. уровня общего назначения) являются машинно-
независимыми, позволяют создавать компактные обозримые программы при
относительно небольших затратах времени и труда программистов. Разработка
программ значительно упрощается при использовании языков высокого уровня в
качестве языков программирования. Однако при этом снижается эффективность
программ по быстродействию и затратам памяти в сравнении с применением языка
ассемблера. Но этот недостаток с лихвой перекрывается четкостью и легкостью
написания программы. (декларативного)
стиля программирования (языки исскуственного интеллекта). Наиболее популярные
языки программирования Математические расчеты, научные
исследования 1971 Системное программирование Системы диалога со средствами машинной графики Фирма INMOS(Англия) Кроме того, в
настоящее время появились языки так называемого 4-го поколения - это языки СУБД,
электронных таблиц, интегрированных систем и т.д., которые предназначены для
решения узкого круга задач прикладного характера (например, обработка баз
данных), но зато еще больше, по сравнению с языками общего назначения, снижают
затраты времении труда на создание выходного продукта. Опыт применения ПЭВМ для построения прикладных систем обработки
данных показывает, что самым эффективным инструментом создания контроллера
являются не универсальные языки высокого уровня, а узкоспециализированные языки
- как правило языки высокого манипулирования с особенностями микропроцессора.
Характеристики контроллера при этом определяются, прежде всего, принятой
в Системы управления
контроллера - это программный продукт, обеспечивающий хранение, обновление и
выборку информации, представленной в формализованном виде на различных
носителях. производителями. Наибольшее распространение получили контроллеры на
основе микрокомплекта 8051. Наибольшую популярность среди них имеет
микроконтроллер фирмы INTEL 8051. ICC8051 поддерживает не
только 8051 (КР1816ВЕ51), но и все другие микро-ЭВМ, использующие ту же основную
архитектуру и систему команд (8032, 8044, 80515, 80525 и т.д.). Может
потребоваться только изменение объявлений регистров специального назначения и
портов ввода/вывода. - два режима
компиляции: стандарт ANSI и стандарт ANSI + расширение языка для 8051 - Шесть
моделей памяти, обеспечивающих поддержку любых задач, от совсем простых до
сложных систем, использующих переключение банков памяти - Статическое размещение локальных переменных позволяет
сгенерировать компактный и быстрый код (прямоадресуемые биты) могут объявляться и
использоваться как стандартные типы данных в языке Си - Возможность написания
на Си функций-обработчиков прерываний (включая определение векторов прерываний)
без использования ассемблера - Поставляемые вместе с компилятором обьявления
SFR и BIT, специфичных для каждого члена семейства кристаллов
8051. Компилятор Си ICC8051 поддерживает все основные элементы
языка Си в стандарте ANSI. Переменные располагаются в памяти, начиная со
старшего байта и заканчиваются младшим ("старший байт - по младшему адресу"). [1] Специфические для 8051 типы данных sfr и bit
отличаются от стандартных типов данных языка Си, т.к. размещаются в особых
областях памяти. [2] Описание "char" эквивалентно "unsigned char", но
может быть изменено на "signed char" с помощью опции компилятора -с. [3]
Перечисляемые переменные ("enum") размещаются с использованием наиболее
короткого возможного типа данных, определяемого диапазоном перечисляемых
констант - от "char" до "int". Система
микропрограммирования является набором компактных программных продуктов для
разработки программ для микропроцессоров. СМ реализована для работы на ряде
компьютеров, от небольших 16-разрядных персональных машин до 32-разрядных
суперминикомпьютеров. В нем имеется ряд примеров использования как
стандартных", так и имеющих особенности средств СМ. Отметим, что независимые
средства ассемблера СМ очень просты и эффективны. программ, с универсальными
характеристиками и применением. Хотя ассемблеры созданы на базе одного и того же
основного пакета, они обладают высокой степенью совместимости с ассемблерами
разработчиков микропроцессоров. Основные предметы - это способы использования
ассемблера, поддержка модульного программирования и связь с языками высокого
уровня. Все ассемблеры, так же как и ХLINK,
используют для внутренних вычислений 32-разрядные структуры, что позволяет
виртуально генерировать код любого размера (т.е. не существует предела в 64
кБайт, что могло бы затруднить использование процессоров типа 68000). Для
обеспечения совместимости внутри пакета было применено несколько компромиссных
решений, с учетом совместимости с ассемблерами разработчиков микропроцессоров.
Особенно это касается макро-конструкций, которые сильно различаются у различных
разработчиков. Во многих отношениях, однако, СМ превосходит оригинальные
ассемблеры. Следующая таблица дает грубое - машинным командам
(именам и синтаксису) - директивам распределения памяти (именам и синтаксису) - директивам перемещения
- макросредствам. Заметим, что средства, перечисленные в разделе "не
совместимы", часто отличаются от оригинальных ассемблеров разработчиков только
синтаксисом. Наиболее популярными на сегодняшний день у программистов
являются С-51 и Assembler 8051, так как оба они позволяют получать исходный
код. Результатом данного проектирования должен
явиться программный продукт контроллера, обеспечивающий данными вычислитель о
скорости летательного аппарата. Система должна обеспечивать считывание с
датчиков и обработку данных, используя следующий набор операций: считывание,
обработка, формирование слов, выдача на ЦАП приборной скорости. счтанные данные с маски максимальной скорости; слово 207 в соответствии с РТМ; Кроме того, система должна включать в себя следующие
подсистемы: контроль о превышении скорости более чем
на 2 км/ч, сигнализируя о перегрузки; частота обновления минимальная
31 мсек по каждому значению и максимальная 60 мсек по каждому
значению. В
качестве базового языка программирования использовать В настоящем разделе выпускной работы были
проведены следующие работы: - рассмотрена
и проанализирована проблема выбора инструментальных средств для разработки
контроллера, на основании чего выбраны языки С-51 и Assembler; - на основании
анализа требуемого к контроллера было сформулирована задача и требования к
комплексу программ деятельности контроллера. Данные в системе представляют собой
информацию в виде переменных, которым жестко заданы адреса переменных для обмена
между программами обслуживания контроллера. При выборе элементной базы прибора контроля учитывались
следующие обстоятельства: - построить разрабатываемую технику на современном
уровне (по функциям, стоимости, энергопотреблению и габаритам) исключительно на
отечественных элементах не представляется возможным; - так как мощность,
потребляемая МК, в значительной мере определяет возможности разработки
экономичной аппаратуры, применения кабелей питания небольшого сечения и должна
быть выбрана микро мощная элементная база. Часть схемы контроллера может быть
выполнена на элементной базе с небольшим быстродействием, однако для другой
части схемы должны быть применены микро мощные элементы с высоким
быстродействием. Одним из, таким элементом является микроконтроллер Intel
87C51FB. Применяемый в разработке микроконтроллер Intel 87C51FB обладает
следующими основными характеристиками, которые необходимо знать для выполнения
поставленной в дипломном проекте задаче. Intel87C51FB относится к семейству n-
МОП технологии и выпускается в корпусе БИС, имеющем 40 внешних выводов.
Цоколевка корпуса и наименования выводов показаны на рис 3.1. Для работы
Intel87C51FB требуется один источник электропитания +5 В. Через четыре
программируемых порта ввода/вывода Intel87C51FB взаимодействует со средой в
стандарте ТТЛ-схем с тремя состояниями выхода. Корпус Intel87C51FB имеет два
вывода для подключения кварцевого резонатора, четыре вывода для сигналов,
управляющих режимом работы МК, и восемь линий порта 3, которые могут быть
запрограммированы пользователем на выполнение специализированных
(альтернативных) функций обмена информацией со средой. Разработки на базе контроллеров Intel87C51FB поддерживается
ассемблером, программным симулятором, внутрисхемным эмулятором фирмы Phyton и
программатором. Серия Intel87C51FB подходит для широкого спектра приложений от
схем высокоскоростного управления автомобильными и электрическими двигателями до
экономичных удаленных приемопередатчиков, показывающих приборов и связных
процессоров. Наличие ПЗУ позволяет подстраивать параметры в прикладных
программах (коды передатчика, скорости двигателя, частоты приемника и
т.д.). Малые размеры корпусов, как для обычного, так и для поверхностного
монтажа, делает эту серию микроконтроллеров пригодной для портативных
приложений. Низкая цена, экономичность, быстродействие, простота использования и
гибкость ввода/вывода делает Intel87C51FB привлекательным даже в тех областях,
где ранее не применялись микроконтроллеры. Например, таймеры, замена жесткой
логики в больших системах, сопроцессоры. - Большинство команд (94)
имеют формат один или два байта и выполняются за один или два машинных
цикла; - 14 - битовые команды; - ОЗУ данных емкостью 128 байта; - блок
двухуровневого векторного прерывания от пяти источников; - генератор, схему синхронизации и управления; - прямая,
косвенная и относительная адресация данных и команд; Рассмотрим структурную
схему микроконтроллера Intel87C51FB рисунок 3.2. Основу структурной схемы образует внутренняя двунаправленная 8-битная
шина, которая связывает между собой все основные узлы и устройства: резидентную
память, АЛУ, блок регистров специальных функций, устройство управления и порты
ввода/вывода. Рассмотрим основные элементы структуры и особенности организации
вычислительного процесса. 8-битное АЛУ может выполнять арифметические операции сложения,
вычитания, умножения и деления; логические операции И, ИЛИ, исключающее ИЛИ, а
также операции циклического сдвига, сброса, инвертирования и т.п. В АЛУ имеются
программно недоступные регистры T1 и T2, предназначенные для временного хранения
операндов, схема десятичной коррекции и схема формирования
признаков. Простейшая операция сложения используется в АЛУ для
инкрементирования содержимого регистров, продвижения регистра-указателя данных и
автоматического вычисления следующего адреса РПП. Простейшая операция вычитания
используется в АЛУ для декрементирования регистров и сравнения
переменных. Простейшие операции автоматически образуют "тандемы" для
выполнения в АЛУ таких операций, как, например, инкрементирование 16-битных
регистровых пар. В АЛУ реализуется механизм каскадного выполнения простейших
операций для реализации сложных команд. Так, например, при выполнении одной из
команд условной передачи правления по результату сравнения в АЛУ трижды
инкрементируется СК, дважды производится чтение из РПД, выполняется
арифметическое сравнение двух переменных, формируется 16-битный адрес перехода и
принимается решение о том, делать или не делать переход по программе. Все
перечисленные операции выполняются в АЛУ всего лишь за 2 мкс. Важной
особенностью АЛУ является его способность оперировать не только байтами, но и
битами. Отдельные программно-доступные биты могут быть установлены, сброшены,
инвертированы, переданы, проверены и использованы в логических операциях. Эта
способность АЛУ, оперировать битами, столь важна, что во многих описаниях
Intel87C51FB говорится о наличии в нем "булевского процессора". Для управления
объектами часто применяются алгоритмы, содержащие операции над входными и
выходными булевскими переменными (истина/ложь), реализация которых средствами
обычных микропроцессоров сопряжена с определенными трудностями. Таким образом,
АЛУ может оперировать четырьмя типами информационных объектов: булевскими (1
бит), цифровыми (4 бита), байтными (8 бит) и адресными (16 бит). В АЛУ
выполняется 51 различная операция пересылки или преобразования этих данных. Так
как используется 11 режимов адресации (7 для данных и 4 для адресов), то путем
комбинирования "операция/ режим адресации" базовое число команд 111 расширяется
до 255 из 256 возможных при однобайтном коде операции. Память программ и память данных, размещенные на кристалле физически
и логически разделены, имеют различные механизмы адресации, работают под
управлением различных сигналов и выполняют разные функции. Память программ
(ПЗУ или СППЗУ) имеет емкость 64 Кбайта и предназначена для хранения команд,
констант, управляющих слов инициализации, таблиц перекодировки входных и
выходных сменных и т.п. РПП имеет 16-битную шину адреса, через которую
обеспечивается доступ из счетчика команд или из регистра-указателя данных.
Последний выполняет функции базового регистра при косвенных переходах по
программе или используется в командах, оперирующих с таблицами. Память данных
(ОЗУ) предназначена для хранения переменных в процессе выполнения прикладной
программы, адресуется одним байтом и имеет емкость 128 байт. Кроме того, к
адресному пространству РПД примыкают адреса регистров специальных функций (РСФ),
которые перечислены в табл. 3.1. Аккумулятор и ССП.
Аккумулятор является источником операнда и местом фиксации результата при
выполнении арифметических, логических операций и ряда операций передачи данных.
Кроме того, только с использованием аккумулятора могут быть выполнены операции
сдвигов, проверка на нуль, формирование флага паритета и т.п. Регистр-указатель стека * 0A0H Регистр приоритетов TH0 Таймер 1 (младший байт) Регистры, имена которых отмечены знаком
( При выполнении многих команд в АЛУ
формируется ряд признаков операции (флагов), которые фиксируются в регистре ССП.
В табл. 3.2. приводится перечень флагов ССП, даются их символические имена и
описываются условия их формирования. Флаг переноса.
Устанавливается и сбрасывается аппаратурными средствами или программой
при Флаг вспомогательного переноса.
Устанавливается и сбрасывается только аппаратурными средствами при выполнении
команд сложения и вычитания и сигнализирует о переносе или заем в бите
3 Флаг 0. Может быть
установлен, сброшен или проверен программой как флаг, специфицируемый
пользователем Выбор банка регистров. Устанавливается и сбрасывается программой
для выбора рабочего банка регистров (см. примечание) Флаг переполнения. Устанавливается и
сбрасывается аппаратно при выполнении арифметических операций Флаг паритета. Устанавливается и сбрасывается аппаратуры в
каждом цикле команды и фиксирует нечетное/четное число единичных бит в
аккумуляторе, т.е. выполняет контроль по четности RS1 Границы
адресов Наиболее "активным" флагом
ССП является флаг переноса, которые принимает участие и модифицируется в
процессе выполнения множеств операций, включая сложение, вычитание и сдвиги.
Кроме того, флаг переноса (C) выполняет функции "булевого аккумулятора" в
командах, манипулирующих с битами. Флаг переполнения (OV) фиксирует
арифметическое переполнение при операциях над целыми числами со знаком и делает
возможным использование арифметики в дополнительных кодах. АЛУ не управляет
флагами селекции банка регистров (RS0, RS1), и их значение полностью
определяется прикладной программой и используется для выбора одного из четырех
регистровых банков. Широкое распространение получило представление о том, что
в микропроцессорах, архитектура которых опирается на аккумулятор, большинство
команд работают с ним, используя адресацию "по умолчанию" (неявную). В
Intel87C51FB дело обстоит иначе. Хотя процессор имеет в своей основе
аккумулятор, однако, он может выполнять множество команд и без участия
аккумулятора. Например, данные могут быть переданы из любой ячейки РПД в любой
регистр, любой регистр может быть загружен непосредственным операндом и т.д.
Многие логические операции могут быть выполнены без участия аккумулятора. Кроме
того, переменные могут быть инкрементированы, декрементированы и проверены
(test) без использования аккумулятора. Флаги и управляющие биты могут быть
проверены и изменены аналогично. 8-битный указатель
стека (РУС) может адресовать любую область РПД. Его содержимое инкрементируется
прежде, чем данные будут запомнены в стеке в ходе выполнения команд PUSH и CALL.
Содержимое РУС декрементируется после выполнения команд POP и RET. Подобный
способ адресации элементов стека называют прединкрементным/постдекрементным. В
процессе инициализации Intel87C51FB после сигнала СБР в РУС автоматически
загружается код 07H. Это значит, что если прикладная программа не переопределяет
стек, то первый элемент данных в стеке будет располагаться в ячейке РПД с
адресом 08Н. Двухбайтный регистр-указатель данных (РУД) обычно используется
для фиксации 16-битного адреса в операциях с обращением к внешней памяти.
Командами МК51 регистр-указатель данных может быть использован или как 16-битный
регистр, или как два независимых 8-битных регистра (DPH и
DPL). В составе средств Intel87C51FB имеются
регистровые пары с символическими именами ТНО, TLO и THI, TLI, на основе которых
функционируют два независимых программно-управляемых 16-битных таймера/счетчика
событий. Буфер последовательного порта. Регистр с символическим именем SBUF
представляет собой два независимых регистра - буфер приемника и буфер
передатчика. Загрузка байта в SBUF немедленно вызывает начало процесса передачи
через последовательный порт. Когда байт считывается из SBUF, это значит, что его
источником является приемник последовательного порта. Регистры специальных
функций. Регистры с символическими именами IP, IE, TMOD, TCON, SCON и PCON
используются для фиксации и программного изменения управляющих бит и бит
состояния схемы прерывания, таймера/счетчика, приемопередатчика
последовательного порта и для управления мощностью электропитания Intel87C51FB.
Все четыре порта предназначены для ввода или вывода информации побайтно.
Каждый порт содержит управляемые регистр-защелку, входной буфер и выходной
драйвер. Все выводы порта 3 могут быть использованы для реализации
альтернативных функций, перечисленных в табл. 3.3.. Альтернативные функции могут
быть задействованы путем записи 1 в соответствующие биты регистра-защелки (Р3.0-
Р3.7) порта 3. Чтение. Активный
сигнал низкого уровня формируется аппаратурно при обращении к
ВПД T0 Вход
таймера/счетчика 0 или тест-вход Вход
приемника последовательного порта в режиме УАПП. Ввод/вывод данных в режиме
сдвигающего регистра Порт 0 является
двунаправленным, а порты 1, 2 и З - квазидвунаправленными. Каждая линия портов
может быть использована независимо для ввода или вывода информации. Для того
чтобы некоторая линия порта использовалась для ввода, в D-триггер регистра-
защелки порта должна быть записана 1, которая закрывает МОП-транзистор выходной
цепи. По сигналу СБР в регистры-защелки всех портов автоматически записываются
единицы, настраивающие их тем самым на режим ввода. Все порты могут быть
использованы для организации ввода/вывода информации по двунаправленным линиям
передачи. Однако порты 0 и 2 не могут быть использованы для этой цели в случае,
если МК-система имеет внешнюю память, связь с которой организуется через общую
разделяемую шину адреса/данных, работающую в режиме временного
мультиплексирования. При выполнении команды, которая
изменяет содержимое регистра-защелки порта, новое значение фиксируется в
регистре в момент S6P2 последнего цикла команды. Однако опрос содержимого
регистра-защелки выходной схемой осуществляется во время фазы Р1 и,
следовательно, новое содержимое регистра-защелки появляется на выходных
контактах порта только в момент S1P1 следующего машинного цикла. Нагрузочная
способность портов. Выходные линии портов 1, 2 и 3 могут работать на одну ТТЛ-
схему. Линии порта 0 могут быть нагружены на два входа ТТЛ-схем каждая. Линии
порта 0 могут работать и на n-МОП-схемы, однако при этом их необходимо
подключать на источник электропитания через внешние нагрузочные резисторы за
исключением случая, когда шина порта 0 используется в качестве шины
адреса/данных внешней памяти. Входные сигналы для МК51 могут формироваться
ТТЛ-схемами или n-МОП-схемами. Допустимо использование в качестве источников
сигналов для Intel87C51FB схем с открытым коллектором или открытым стоком.
Однако при этом время изменения входного сигнала при переходе из 0 в 1 окажется
сильно затянутым. Обращение к портам
ввода/вывода возможно с использованием команд, оперирующих с байтом, отдельным
битом и произвольной комбинацией бит. При этом в тех случаях, когда порт
является одновременно операндом и местом назначения результата, устройство
управления автоматически реализует специальный режим, который называется
"чтение-модификация-запись". Этот режим обращения предполагает ввод сигналов не
с внешних выводов порта, а из его регистра-защелки, что позволяет исключить
неправильное считывание ранее выведенной информации. Большинство команд (94) имеют формат один или два байта и
выполняются за один или два машинных цикла. При тактовой частоте 2 МГц
длительность машинного цикла составляет 1 мкс. Обычно первый байт команды любых
типа и формата всегда содержит код операции (КОП). Второй и третий байты
содержат либо адреса операндов, либо непосредственные операнды. Состав операндов Intel87C51FB включает в себя операнды четырех
типов: биты, 4-битные цифры, байты и 16-битные слова. Пример рис 3.3. Intel87C51FB имеет 128 программно-управляемых флагов пользователя.
Имеется также возможность адресации отдельных бит блока регистров специальных
функций и портов. Для адресации бит используется прямой 8-битный адрес (bit).
Косвенная адресация бит невозможна. Карты адресов отдельных бит представлены на
рис и рис . Четырехбитные операнды используются только при операциях обмена
(команды SWAP и XCHD). Восьмибитным операндом может быть ячейка памяти программ
или данных (резидентной или внешней), константа (непосредственный операнд),
регистры специальных функций (РСФ), а также порты ввода/вывода. Порты и РСФ
адресуются только прямым способом. Байты памяти могут адресоваться также и
косвенным образом через адресные регистры (R0, R1, DPTR и PC). Двухбайтные
операнды - это константы и прямые адреса, для представления которых используются
второй и третий байты команды. В Intel87C51FB
используются такие способы адресации данных: прямая, непосредственная, косвенная
и неявная. Следует отметить, что при косвенном способе адресации РПД
используются все восемь бит адресных регистров R0 и R1. Слово состояния программы (PSW) включает в себя четыре флага: C - перенос, AC
- вспомогательный перенос, O - переполнение и P - паритет. Флаг паритета
напрямую зависит от текущего значения аккумулятора. Если число единичных бит
аккумулятора нечетное, то флаг P устанавливается, а если четное - сбрасывается
попытки изменить флаг Р, присваивая ему новое значение, будут безуспешными, если
содержимое аккумулятора при этом останется неизменным. Флаг АС
устанавливается в случае, если при выполнении операции сложения/вычитания между
тетрадами байта возник перенос/заем. Флаг C устанавливается, если в старшем
бите результата возникает перенос или заем. При выполнении операций умножения и
деления флаг C сбрасывается. Флаг OV устанавливается, если результат операции
сложения/вычитания не укладывается в семи битах и старший (восьмой) бит
результата не может интерпретироваться как знаковый. При выполнении операции
деления флаг OV сбрасывается, а в случае деления на нуль устанавливается. При
умножении флаг OV устанавливается, если результат больше 255. В табл. 3.5
перечисляются команды, при выполнении которых модифицируются флаги результата. В
таблице отсутствует флаг паритета, так как его значение изменяется всеми
командами, которые изменяют содержимое аккумулятора. Кроме команд, приведенных в
таблице, флаги модифицируются командами, в которых местом назначения результата
определены PSW или его отдельные биты, а также командами операций над
битами. C, OV, AC ADDC C =
MUL C При использовании ассемблера ASM51 для получения объектных кодов
программ допускается применение в программах символических имен регистров
специальных функций (РСФ), портов и их отдельных бит рис. 3.4., рис 3.5. Для
адресации отдельных бит РСФ и портов (такая возможность имеется не у всех РСФ)
можно использовать символическое имя бита следующей структуры: Например, символическое имя пятого
бита аккумулятора будет следующим: АСС.5. Символические имена РСФ, портов и их
бит являются зарезервированными словами для Intel87C51FB, и их не надо
определять с помощью директив ассемблера. Выбор Инструментальных средств При
выборе инструментальных средств разработки было необходимо обеспечить удобство и
быстроту создания и отладки программного обеспечения микроконтроллера. Программа
отлаживалась в интегрированной среде PICE-51, которую можно охарактеризовать
следующим образом. PICE под Windows основная интегрирующая среда разработки для
технологии микрокристалла включающей INTEL87C51FB семейств микроконтроллера.
PICE позволяет пользователю писать, отлаживать, и оптимизировать многие
процессоры для разработки микропрограмм. PICE включает текстовый редактор,
имитатор, и руководитель проекта. PICE также имеет внутрисхемный эмулятор,
программирующие устройства, и другие системы разработки инструментальных средств
микрокристалла. Инструментальные средства PICE реализуют для пользователя
следующие функции: : 80C31/32, 8XC51/52/54/58, 8XL/C51FA/FB/FC, 8XC51RA/RB/RC;
: 80C31/32, 8XC51/52/54/58, 8XC51FA/FB/FC;
8XC51RA+/RB+/RC+/RD+, 8XC524, 8XC528, 8XC550, 8XC652, 8XC654, 8XC575, 8XC576,
8XC851, 89C535,89C536, 89C538; : 80C31, 8XC51, 80C32,
8XC52, 8XC154; Автоматически располагает ошибки в исходных файлах для
редактирования; · Часы ход программы с имитатором или часами в реальном
времени с внутрисхемным эмулятором POD51-RX. · Находить
быстрые ответы на вопросы с PICE онлайновой подсказки; Встроенная разработка
среды Project-51 позволяет пользователю быстро перемещаться между другими
способами разработки/отладки. Руководитель проекта позволяет
пользователю создавать проект, и работать со специфическими файлами связанными с
проектом. Project-51 руководитель проекта также позволяет пользователю
формировать приложение и загружать программный код в эмулятор или имитатор с
нажатием мыши. редактор позволяет программисту писать и
редактировать исходные файлы микропрограмм или другие текстовые файлы для
INTEL87C51FB микроконтроллеров; программный имитатор
имитирует выполнение инструкции и I/O микроконтроллеров. Внутрисхемный
эмулятор POD51-RX использует аппаратные средства, чтобы эмулировать INTEL87C51FB
микроконтроллеров в реальном времени. Аппаратные средства POD51-RX эмулятора
продаются отдельно. После установки и компиляции проектов в Project-51,
программист захочет увидеть как сделаны его кодовые прогоны. Если у вас есть
программатор устройства, вы можете запрограммировать устройство микроконтроллера
и подключите программируемое устройство в вашем фактическом приложении, чтобы
проверить, что приложение работает как ожидается. Обычно, приложение не будет
выполняться правильно сначала, и программист должен отладить код. Отладчик может
использовать Project-51, чтобы с имитировать программный код или может
использовать эмулятор POD51-RX, чтобы выполнять созданные микропрограммы в
фактическом приложении пока программист производит отлаживание созданной
программы. Во время отладки, пользователь может использовать прерывание и точки
останова, когда выполняется код его программы. Можно наблюдать величины регистра
в окне регистра или в специальном функциональном окне регистра, чтобы увидеть
состояние процессора и следовательно выполняемый код и пошаговый
режим. Внутрисхемный эмулятор POD51-RX выполняет код в фактической скорости
выполнения (реальное время) в разрабатываемых целевых аппаратных средствах,
останавливаясь только в определенных контрольных точках. Project-51 имитирует
выполнение любого процессора и имитирует условия I/O в скоростях, которые
зависят от скорости вашего PC. Все эти функции используют информацию из
Project-51 проекта. Строка помечается в исходной программе, символических
позициях в памяти, и функциональные имена из кода могут использоваться, чтобы
установить прерывание и точки останова и изучать и модифицировать
регистры. Исходя из всего выше сказанного, выбор элементной базы был
остановлен на уже перечисленных микросхемах. Выбор инструментальных средств
разработки обоснован необходимостью применения интегрированной среды Project-51
для отладки ассемблерных программ контроллеров. В процессе дипломного
проектирования необходимо разработать подсистему контроля вскрытия персонального
компьютера обеспечивающую постоянный контроль поставленных на охрану объектов и
выдачу информации о их состоянии на АРМ СБ. Осуществлять считывание с масок
кодов скоростей; -разрядного слова по ARING-
427; Результатом анализа и осмысления,
поставленных при разработке данной подсистемы требований явилась следующая
структура подпрограмм в основной программе, обеспечивающей выполнения
поставленных требований: - принимать коды грея;
Код_Двоичный3=Код_Грея3 + Код_Двоичный4; Код_Двоичный0=Код_Грея0 + Код_Двоичный1; - привести значение скорости к цене младшего
разряда; подсчитать четность слова и
занести по адресу 31 в слове. 4. Подпрограмма, осуществляющая выдачу слова в магистраль с частотой
12.5КГц, должна выполнять следующие возложенные на нее функции: Подпрограмма, осуществляющая выдачу приборной скорости в аналоговом
виде и должна выполнять следующие возложенные на нее функции: установить флаг
в ЦАП о записи в регистр. Файловая структура подсистемы представляет собой
совокупность шести файлов, один из которых содержит основной текст программы
SPEED.C , со всеми вышеперечисленными основными и вспомогательными
подпрограммами. Другие файлы - содержат подпрограммы написаны на ассемблере
используемых в основной программе. При помощи интегрированной среды Project-51
программа компилируется и, в случае, успешного результата обработки, создает
файл SPEED.HEX, содержащий исходный код программы в шестнадцатиричном виде.
Полученный исполняемый программный код при помощи программатора, подключенного к
компьютеру, заносится в микроконтроллер для последующего выполнения и
тестирования, обнаружения возможных допущенных при программировании
ошибок. Для отладки созданного программного кода, внутрисхемный эмулятор
устанавливался на опытный образец печатной платы с напаянными на ней всеми
необходимыми для корректной работы микросхемами и навесными элементами
(резисторы, конденсаторы). Все микросхемы, установленные на плате, в
совокупности с микроконтроллером и его программным обеспечением, составляют
разрабатываемый контроллер. Подобная отладка, с применением осциллографа,
контрольного пульта ПК-10, дает вполне ясную картину программно генерируемых
сигналов с микроконтроллера. Осциллограф позволяет в удобной форме проследить
периодичность генерации сигналов и длительность процессов, которые они вызывают
в схеме, а ПК-10 достоверность выходного слова. Также довольно легко наблюдать
принимаемые микроконтроллером на обработку сигналы, поступающие с других
микросхем. Применение осциллографа и ПК-10, при отладке программы на реальной
аппаратуре, необходимо, и безусловно, значительно облегчает отладку и доработку
исходного текста программы. const
int speed=172 - служит для добавления при наземном контролле контроллера; static int a @ 0x18 - временная преременная; Переменные для выходного слова адрес 206 по РТМ с их
адресами static unsigned char SlVmd_2 @ 0x11; Переменные для
выходного слова адрес 207 по РТМ с их адресами static unsigned char SlVpr_2
@ 0x3d; Переменные для выходного слова адрес 271 по РТМ с их адресами
static unsigned char SlDs_2 @ 0x39; Переменная для выдачи на ЦАП с его
адресом static unsigned long Stec @ 0x28; Переменные
для сохранение переведенных скоростей с их адресами Переменные
вводимых скорости с приборной скорости маски с их адресами Переменные вводимых
скорости с максимальной скорости маски с их адресами Переменные рабочее слово
SlRab расписаны в битовой резидентной памяти по битам и словам с их
адресами static unsigned char SlRab_3 @ 0x2d; static unsigned char
Adress @ 0x2f - по этому адресу находится адрес выходного слова; static bit unsigned char SlRab_bit29 @ 0x65;
static bit unsigned char SlRab_bit26 @ 0x62; static
bit unsigned char SlRab_bit23 @ 0x6f; static bit unsigned
char SlRab_bit20 @ 0x6c; static bit unsigned char
SlRab_bit17 @ 0x69; static bit unsigned char SlRab_bit14 @
0x76; static bit unsigned char SlRab_bit11 @ 0x73; static bit unsigned char SlRab_bit8 @ 0x70; static bit unsigned char SlRab_bit5 @ 0x7d; static bit
unsigned char SlRab_bit2 @ 0x7a; Переменные приборной
скорости в коде Грея расписаны в битовой резидентной памяти по битам с их
адресами static bit unsigned char Vprg_bit7 @ 0x0f; static bit unsigned char Vprg_bit4 @ 0x0c; static
bit unsigned char Vprg_bit1 @ 0x09; Переменные приборной скорости в двоичном коде расписаны в битовой
резидентной памяти по битам с их адресами static bit
unsigned char Vprd_bit7 @ 0x1f; static bit unsigned char Vprd_bit4
@ 0x1c; static bit unsigned char Vprd_bit1 @ 0x19; Переменные максимальной скорости в коде
Грея расписаны в битовой резидентной памяти по битам с их адресами static bit unsigned char Vmdg_bit7 @ 0x2f; static bit
unsigned char Vmdg_bit4 @ 0x2c; static bit unsigned char Vmdg_bit1
@ 0x29; Переменные
максимальной скорости в двоичном коде расписаны в битовой резидентной памяти по
битам с их адресами static bit unsigned char Vmdd_bit7
@ 0x3f; static bit unsigned char Vmdd_bit4 @ 0x3c; static bit unsigned char Vmdd_bit1 @ 0x39; Форматы 206, 207 слова
состоят из 32 разрядов который показан в таблице 2.2 . CRC Алгоритм функционирования контроллера - Очстка всех областей переменных; - Подготовка вывода слова 207 с признаком
"нет вычисленных данных"; - Цикл
проверки на отказ маски приборной скорости; - Маштабирование приборной скорости для выдачи в ЦАП; - Формирование выходного слова адрес 206 в соответствии с
РТМ, изм,3; Выводы - был
проведен анализ структуры программы контроллера; Описание функций основных
модулей системы. Основной файл системы является проэктный файл - SPEED.PRJ,
в которой: указывается путь к файлам системы, установка адресов ПЗУ, ОЗУ, стека,
векторов прерывания и параметров контроллера, список компилируемых
файлов. /*---------- Запуск
таймера на вывод --------------------------------------*/ /*-------- Сброс сторожевого таймера --
------------------------------------*/ /*------
------------------ Вывод на ЦАП -----------------------------------*/ /*--------- Подготовка вывода 206 слова --
---------------------------------*/ Priznak_Work(0,1);/* признак нет
вычисленных данных */ SlVmd_2=SlRab_2; /*--------- Подготовка вывода 207 слова -----------------------------------
*/
Priznak_Work(0,1);/* признак нет вычисленных данных */ SlVpr_2=SlRab_2; /*--------- Заполнение начальными
данными Vpr и Vmd -----------------------*/ Perevod_Md(); /* перевод из грея в
двоичную */ Perevod_Pr(); /* перевод из грея в
двоичную */ /*-------- Сброс сторожевого таймера ------------------
--------------------*/ ImVxodMd(); /*
имитация входа Vmd */ ImVxodPr(); /* имитация
входа Vpr */ /*----------------- Цикл проверки на отказ Vmd ------
----------------------*/ Cikl_Otkaz_Vpr(); if(INT0==1) Test_Kontrol();
if(Vprd>=Vmdd) { RXD=0; PK_Vpr=1; }
Machtab(StecVprd); Priznak_Work(1,0);/*
признак функциональный тест */ SlDs_2=SlRab_2; /*------------- копируем в поле 206 функциональный тест ------------------
*/ asm(" clr TCON.4 ");/* остановка таймера
*/ asm(" setb TCON.4 ");/* запуск таймера */
Priznak_Work(1,0);/* признак функциональный тест */ SlVmd_2=SlRab_2; /*----------------- Тест Контроль
программы -------------------------------*/
Adress=0x9d;/* адрес слова 271 */
CalcChetSl();/* подсчет четности */
SlDs_4=SlRab_4; /*------
Формирование 206 слова в соответствии с РТМ, изм,3 для Vpr ------*/
Priznak_Usvic();/* признак от УСВИЦ-250 */ if
((Vpr_Ok==1)(PO_Ok==1)) Priznak_Work(0,0);/* отказ */ /*------------- Копирование параметров в область вывода ----------
---------*/ SlVpr_4=SlRab_4; /*----- Формирование 207 слова в
соответствии с РТМ, изм,3 для Vmd -------*/ Priznak_Usvic();/* признак от УСВИЦ-250
*/ if ((Vmd_Ok==1)(PO_Ok==1)) Priznak_Work(0,0);/*
отказ */ SlVmd_2=SlRab_2; /*-------------------- G O T O -> N A C H ------------------
---------*/ /*------------- Запуск таймера -----------
---------------*/ asm(" mov a,#0eah "); /* число для
загрузки таймера */ asm(" mov a,#0d3h "); /* равна eah, а младшая - d3h */ Назначение: запуск таймера с установки приоритетов прерываний. StecVmdd=StecVprd=0; Назначение: обнуление областей переменных в начале работы
программы от мусора при включения питания. push 0e0h
orl p1,#14h ;запрещение D2 и разрешение D4 inc p1 call Read_P_1_5 Выход: заполнены биты максимальной маски. push 3 orl p1,#1 ;запрещение D4 и разрешение D2 inc p1 call
Read_P_1_5 Назначение: считывание кодов с приборной
маски -разрядного
слова с частотой 12.5 КГц. ORL P0,#0C0H
MOV Bit6V,C MOV R1,#18 CPL Bit7V INC R0 POP 0D0H Вход: номер выводимого
слова (номера 0 соответствует выводимому слову 206, и соответственно
2=207,3=271). push 2 nop ;задержка чтобы ЦАП успел принять данные Назначение: аналоговый вывод на ЦАП приборной скорости . Процедура установки признака от УСВИЦ-250. Назначение: в биты 8, 9 выходного слова ставится 0 и 1
соответственно для обозначения, что слово исходит от УСВИЦ-250. void Priznak_Work(bit unsigned char a, bit
unsigned char b){ Назначение: в 30
и 29 биты ставятся признаки работоспособность УСВИЦ-250. Процедура наземного контроля. vvodvpr(); /*----------------- Сохраняем тестовое значение ---------------------------
*/ /*----------------- Тест на наличие Vmd >=
Vpr ----------------------------*/ /*----------------- Отнимаем тестовое значение -----
-----------------------*/ /*-----------------
Маштабирование Vprd -----------------------------------*/ /*------------- копируем в поле 271
функциональный тест ------------------*/ asm("
clr TCON.4 ");/* остановка таймера */ asm(" setb TCON.4 ");/* запуск таймера
*/ Priznak_Work(1,0);/* признак функциональный тест */ SlVpr_2=SlRab_2; /*-------------
копируем в поле 207 функциональный тест ------------------*/ asm(" clr TCON.4 ");/* остановка таймера */
asm(" setb TCON.4 ");/* запуск таймера */ /*--------
Формирование дискретного 271 слова ----------------------------*/ Priznak_Test();/* растановка признаков
тестирования в слове */ asm(" clr TCON.4 ");/* остановка таймера
*/ asm(" setb TCON.4 ");/* запуск таймера */ Adress=0x61;/* адрес слова 206 */ If_Speed(Vprd);/* проверка на < 50км */ /*------------- Копирование параметров в область вывода --
-----------------*/ SlVpr_4=SlRab_4; /*----- Формирование 207 слова в
соответствии с РТМ, изм,3 для Vmd -------*/ Priznak_Usvic();/* признак от УСВИЦ-250
*/ if ((Vmd_Ok==1)(PO_Ok==1)) Priznak_Work(0,0);/*
отказе */ SlVmd_2=SlRab_2; /*-------- Сброс сторожевого таймера --------------------------
------------*/ Назначение: Пилотом на земле
включает тумблер тест контроля состояния прибора. Максимальная скорость индексом
устанавливается на максимальную скорость (250) и к приборной скорости прибавляем
тестовое значение скорости. При не совпадении скоростей выводим на индикацию
световую и звуковую, сигнализируя о неисправности прибора. После чего проходит
весь цикл программы функционирования прибора. -разрядного рабочего слова.
SlRab_bit31=SlRab_bit31+SlRab_bit3+SlRab_bit4+SlRab_bit5;
SlRab_bit31=SlRab_bit31+SlRab_bit9+SlRab_bit10+SlRab_bit11;
SlRab_bit31=SlRab_bit31+SlRab_bit15+SlRab_bit16+SlRab_bit17;
SlRab_bit31=SlRab_bit31+SlRab_bit21+SlRab_bit22+SlRab_bit23;
SlRab_bit31=SlRab_bit31+SlRab_bit27+SlRab_bit28+SlRab_bit29; Назначение: подсчет четности слова
и выставления знака четности в 31 разряде подсчет четности производиться по
модулю 2. Процедура
перевода из кодов грея в двоичный код максимально допустимую скорость. Vmdd_bit7=Vmdg_bit7+Vmdd_bit8; Vmdd_bit3=Vmdg_bit3+Vmdd_bit4; Назначение: перевод кодов грея в
двоичный код. void Perevod_Pr(void){ Vprd_bit6=Vprg_bit6+Vprd_bit7; Vprd_bit2=Vprg_bit2+Vprd_bit3; Назначение: перевод кодов грея в
двоичный код. void Cikl_Otkaz_Vmd(void){ St=StecVmdd; if (c==0) Назначение:
проверка маски максимальной скорости путем проверки предыдущих значений с
полученными значениями и допуск не должен превышать тестовой единицы. Если
превышение возникло, то проверка проходит еще 3 раза, но если после этого
превышение не исчезло. Выдается световая сигнализация на борт панель пилоту и
записывается в ячейку служебного слова (271). void
Cikl_Otkaz_Vpr(void){ St=StecVprd; if (b==0) Назначение: проверка
маски приборной скорости путем проверки предыдущих значений с полученными
значениями и допуск не должен превышать тестовой единицы. Если превышение
возникло, то проверка проходит еще 3 раза, но если после этого превышение не
исчезло. Выдается световая сигнализация на борт панель пилоту и записывается в
ячейку служебного слова (271). double
rab1; Назначение: масштабирование
необходимо потому, что по ТУ выдача аналогового сигнала должна
соответветствовать всем единицам на входе ЦАП, на аналоговом выходе 0.63
В. -разрядного слова с соответствием с РТМ SlRab=(unsigned long)rab2; -
разрядного слова с соответствием с РТМ необходима данные поместить с 11 по 27
разряд с ценой младшего разряда. Процедура тест контроля программного
обеспечения
Vmdg1=Vmdg; if (Vmdd!=200) { PO_Ok=1; Vmd_Ok=1; } /*----------------------------- 206 -------
-------------------------------*/
if(SlRab!=0) { PO_Ok=1; Vpr_Ok=1; }
Adress=0xe1; Vprg=Vprg1; Назначение: проверка
программы. Это осуществляется путем записи тестовых значений в максимальную и
приборную скорость кодов грея. После чего производится проверка на правильности
перевода из кодов грея в двоичный код, формирования слова и расстановки
признаков. void If_Speed(unsigned int
V){ Назначение: при полеченной
скорости меньше чем 50 км необходимо по ТУ выдавать в выходном слове признак нет
вычисленных данных. &nbs
p; Программа начинает выполнение при подачи питания на
контроллер, независимо от других контроллеров. Программа сначало сбрасывает
сторожевой таймер предназначенный от зацикливаниии программы, который необходимо
сбрасывать в конце программы. После чего очищает все переменные и подготавливает
слова с указанием в них о том, что нет вычисленных данных, т.к. процедура вывода
слов работает независимо от основной программы по прерыванию от таймера. Далее
программы заполняет ячейки скорости. для последующего использавании и проверки
на выход из строя сведодиодов или фотодиодов. После чего выполняет ввод с масок
данных, перевод их, проверку на отказ маскок предельной и максимальной скорости,
проверка на наличии тест контроля, маштабирования л\для вывода на ЦАП, выполняем
тест контроль программного обеспечения с занесением результатов в служебное
слово и копирование полученных данных в слова. Данный программный продукт поставляется на предприятие-заказчик
для конечного использования в борт компьютерах вертолетах или самолетах с
максимальной скоростью не более 250км. При использовании данной версии
программы, программа записывается во внутреннью память процессора, т.к.
процессор имеет встроенную постоянную память. Данная программа разрабатывалсь на ПЭВМ класса PENTIUM c процессором фирмы
INTEL с тактовой частотой 100 МГц и с использование внутрисхемного эмулятора
фирмы Phyton PICE-51. На этой же машине, но с эксперементальным образцом
контроллера проводились испытания. Операционная система
Windows'98. Качество
настоящего проекта будем оценивать по следующим критериям:- полезность (исходная
и общая);- удобство эксплуатации;- эффективность;- модифицируемость;-
машинонезависимость; - информативность; Попробуем проанализировать каждый из вышеперечисленных
критериев, и дать по нему оценку контроллера. Полезность: Продукт
проектирования обладает свойством ПОЛЕЗНОСТИ, если он отвечает поставленным
целям. Это свойство имеет две стороны: 2) общая полезность - возможность продолжать использование продукта
проектирования при изменении условий его применения. Исходя из данного
определения полезности можно сказать, что предлагаемый проект обладает исходной,
но не общей полезностью, так как требования простоты, надежности и эффективности
закладывались в его основу как одни из главных, но в случае изменения условий
его применения эффективность его использования снизится. Продукт проектирования УДОБЕН в ЭКСПЛУАТАЦИИ, если
рассматривается возможность его обновления в соответствии с новыми
требованиями. На основе вышесказанного можно определить контроллер удобен в
эксплуатации, покрайней мере, в течение 1 года после
внедрения. Проект проектирования обладает свойством
эффективности, если он выполняет требуемые функции без лишних затрат
ресурсов. Так как результат проектирования установлен и удовлетворительно
функционирует на процессоре INTEL 8051 широко используемый в самолетостроении в
наше время, то можно определить проект
эффективным. Продукт проектирования необладает
свойством МОДИФИЦИРУЕМОСТИ, т.к. он имеет закрытую структуру, не позволяющую
легко вносить требуемые изменения. Так как под модифицируемостью, видимо
подразумевается степень открытости архитектуры, то проект не обладает этим
свойством. Продукт проектирования обладает свойством
МАШИНОНЕЗАВИСИМОСТИ, если входящие в него функциональные компоненты могут быть
реализованы на иных технических средствах. Машинонезависимость проекта целиком и
полностью зависит от машинонезависимости контроллера, версии которой работают на
довольно многих типах процессоров. Таким образом, свойство машинонезависимости
НЕПРИСУЩЕ. Продукт проектирования обладает
свойством ЗАВЕРШЕННОСТИ, если в нем присутствуют все необходимые компоненты,
каждый из которых разработан
всесторонне. Продукт проектирования
обладает свойством ВНУТРЕННЕЙ СОГЛАСОВАННОСТИ, если он всюду содержит единую
нотацию, терминологию и символику. Он также обладает свойством ВНЕШНЕЙ
СОГЛАСОВАННОСТИ, если можно проследить его соответствие конкретным
требованиям. Продукт проектирования обладает свойством
РАЦИОНАЛЬНОСТИ, если он использует все возможности (языка программирования,
численных методов, технических и других средств) для минимизации расхода
ресурсов. Продукт
проектирования обладает свойством ДОСТУПНОСТИ, если он не допускает селективное
использование его компонентов. На основании информации из раздела 2 можно
сказать, что проект НЕ ДОСТУПЕН. Продукт
проектирования обладает свойством КОММУНИКАТИВНОСТИ, если он дает возможность
легко описывать входные данные и выдает информацию, форма и содержание которой
просты для понимания и несут полезные сведения. Продукт
проектирования не обладает свойством РАСШИРЯЕМОСТИ, если он позволяет при
необходимости увеличить объем обрабатываемых данных или расширить функции
отдельных модулей. описание фнкций основных модулей
программы; проведена оценка качества
проекта; Затраты на разработку программного продукта
рассчитываются по формуле: Zзпд -
затраты на дополнительную заработную плату, руб.; Zээ -
затраты на электроэнергию во время разработки программы, руб.; Разработка программы производилась инженером-
программистом, с заработанной платой 600 рублей в месяц. На разработку программы
ушло 5 месяца, поэтому затраты на зарплату составляют: Дополнительная заработная плата составляет 30% от основной заработной
платы, тогда затраты на дополнительную заработную плату: Отчисления на социальное страхование составляют 37% от
общей заработной платы, то есть Стоимость ПЭВМ, используемой для разработки программы
составляет 15 500 руб. Срок службы персонального компьютера составляет 8 лет.
Тогда на данный момент амортизационные отчисления за месяц составляют: На отладку и тестирование программы с использованием ПЭВМ затрачено 120
рабочих дней, из них, в среднем каждый день по 5 часа. Стоимость электроэнергии
0.14 руб. за киловатт. Мощность, потребляемая ПЭВМ 300 Вт. Посчитаем затраты на
электроэнергию во время разработки программы, руб.; Косвенные расходы составляют 110% от основной заработанной
платы программиста: Таким образом,
подставляя вычисленные значения затрат в формулу (1), получим стоимость затрат
на разработку программы: Расчет экономической эффективности от внедрения программного
продукта Рассчитаем экономическую эффективность от внедрения разработанного
программного продукта на примере сравнения годовых затрат на содержание отдела
рефератированния (5 человек) и содержание ПЭВМ, обслуживающего персонала (1
человек) и консультанта по работе с технической информацией, заменяющих
вышеназванный отдел. Zпв -
затраты после внедрения. Затраты до внедрения
программного продукта рассчитаем по формуле:Zдв = Zзп + Zзпд + Oстр, (3)гдеZзп -
затраты на заработную плату работнику, руб.;Zзпд - затраты на дополнительную
заработную плату, руб.; Средняя заработанная плата работников отдела технической информации
составляет 800 руб., тогда: Дополнительная
заработная плата составляет 30% от основной заработной платы, тогда затраты на
дополнительную заработную плату: Отчисления на социальное страхование составляют 37% от общей заработной
платы, тогда: Таким образом, подставляя вычисленные значения затрат
в формулу (3), получим стоимость затрат до внедрения программы: Затраты после
внедрения программного продукта рассчитаем по формуле: Zзп - затраты на заработную плату
программисту, руб.; Zээ - затраты на
электроэнергию для ПЭВМ, руб.;Оам - амортизационные отчисления, руб.; Заработанная плата
программисту равна 600 тыс. руб., тогда: Дополнительная заработная плата составляет 30% от основной заработной
платы, тогда затраты на дополнительную заработную плату: Отчисления на социальное страхование составляют 37%
от общей заработной платы, тогда: ПЭВМ на рабочем месте работает 8
часов в день. Количество рабочих дней в году 264. Стоимость электроэнергии 0.14
руб. за киловатт. Мощность, потребляемая ПЭВМ 300 Вт. Посчитаем годовые затраты
на электроэнергию, потребляемую ПЭВМ, руб.; Стоимость ПЭВМ, используемой при эксплуатации разработанной
программы составляет 15 500 руб. Срок службы персонального компьютера составляет
8 лет. Тогда амортизационные отчисления за год составляют: Стоимость программного обеспечения равняется себестоимости
программного продукта, посчитанной в предыдущем пункте данной главы.
Следовательно: В затраты на внедрение программного
продукта входят затраты на изготовление сопроводительной документации, на
заработную плату службы сопровождения программного продукта, затраты на обучение
пользователя работе с программой, на установку программного продукта, на
адаптацию программного продукта к условиям пользователя и т.д. Так как размер
данных затрат зависит от конкретных условий, то стоимость затрат на этапе
внедрения можно оценить только качественно, и можно сказать что она будет
соизмерима со стоимостью затрат на этапе разработки. Затраты на внедрение
программного продукта составляют 110% от затрат на этапе разработки программного
обеспечения: Таким образом,
подставляя вычисленные значения затрат в формулу (4), получим стоимость затрат
после внедрения программы: Подставляя рассчитанные затраты до и после
внедрения программы в формулу (2), получим значение экономической эффективности
от внедрения разработанного программного продукта: Полученные результаты говорят об
эффективности внедрения разработанного программного продукта в процессы,
требующие обработки большого объема принятия и выдача с всевозможных датчиков.
Что существенно уменьшает затраты на разработку схем на вентильной логики.
#include <float.h> const
int test_speed=2; /* 0.5==2 */ static bit unsigned char Usvic_Ok
@ 0x50; static bit unsigned char Vmd_Ok @ 0x53; static unsigned char NomParam @ 0x1c; static
unsigned long SlVmd @ 0x10; static unsigned char SlVmd_3 @ 0x12; static unsigned long SlVpr @ 0x3c; static unsigned char
SlVpr_3 @ 0x3e; static unsigned long SlDs @ 0x38;
static unsigned char SlDs_3 @ 0x3a; static unsigned
int CapSlowo @ 0x28; /*------- Рабочая область стеков -------------
-----*/ /*--------- Сохранение переведенных скоростей ----------------
*/ /*--------- Int вводимых скорости ----------------------------*/ /*-------
-- Int переведенных скорости ------------------------*/ /*------- Рабочее слово SlRab
-------------------------*/ static unsigned char SlRab_3 @ 0x2d; static
unsigned char Adress @ 0x2f;/* адреса (206/207/271)*/
static bit unsigned char SlRab_bit29 @ 0x65; static
bit unsigned char SlRab_bit26 @ 0x62; static bit unsigned
char SlRab_bit23 @ 0x6f; static bit unsigned char
SlRab_bit20 @ 0x6c; static bit unsigned char SlRab_bit17 @
0x69; static bit unsigned char SlRab_bit14 @ 0x76; static bit unsigned char SlRab_bit11 @ 0x73; static bit unsigned char SlRab_bit8 @ 0x70; static bit
unsigned char SlRab_bit5 @ 0x7d; static bit unsigned char
SlRab_bit2 @ 0x7a; /*-- Входные битовые Скорость Vpr Grey ------
-----------------*/ static bit unsigned char Vprg_bit7 @ 0x0f; static bit unsigned char Vprg_bit4 @ 0x0c; static
bit unsigned char Vprg_bit1 @ 0x09;
static bit unsigned char Vprd_bit9 @ 0x11; static bit unsigned
char Vprd_bit6 @ 0x1e; static bit unsigned char Vprd_bit3 @
0x1b; static bit unsigned char Vprd_bit0 @ 0x18; static bit unsigned char Vmdg_bit8 @ 0x20;
static bit unsigned char Vmdg_bit5 @ 0x2d; static bit unsigned
char Vmdg_bit2 @ 0x2a; /*-- Выходные битовые Скорость Vmd Din ---
--------------------*/ static bit unsigned char Vmdd_bit7 @
0x3f; static bit unsigned char Vmdd_bit4 @ 0x3c;
static bit unsigned char Vmdd_bit1 @ 0x39; /*-----------------------------------------------------------------
-------*/ /*-----------------
-------------------------------------------------------*/
SlRab_bit31=SlRab_bit31^SlRab_bit3^SlRab_bit4^SlRab_bit5;
SlRab_bit31=SlRab_bit31^SlRab_bit9^SlRab_bit10^SlRab_bit11;
SlRab_bit31=SlRab_bit31^SlRab_bit15^SlRab_bit16^SlRab_bit17;
SlRab_bit31=SlRab_bit31^SlRab_bit21^SlRab_bit22^SlRab_bit23;
SlRab_bit31=SlRab_bit31^SlRab_bit27^SlRab_bit28^SlRab_bit29; /*--------------------------------
----------------------------------------*/ /*--------------------------------------------
----------------------------*/
Vmdd_bit7=Vmdg_bit7^Vmdd_bit8;
Vmdd_bit3=Vmdg_bit3^Vmdd_bit4; /*---
---------------------------------------------------------------------*/ /*---------------
---------------------------------------------------------*/ Vprd_bit7=Vprg_bit7^Vprd_bit8; Vprd_bit3=Vprg_bit3^Vprd_bit4; /*--------------------------------------
----------------------------------*/ /*------------------------------------------------------------------------
*/ /*------------------------------------
------------------------------------*/ /*------------------------------------------------------------------------
*/ /*--------------------------------------------
----------------------------*/ /*----
--------------------------------------------------------------------*/ /*----------------------------------------
--------------------------------*/ /*------------------------------------------------------------------------
*/ /*------------------------------
------------------------------------------*/ /*---------------------------------------------------------------------
---*/ ImVxodMd(); /* имитация входа */ if
((St+test_speed>Vmdd)&&(St-test_speed<Vmdd)) while(c>(-1)); /* Процедура
проверки на отказ Vpr */ int b=3,St; Perevod_Pr();/* перевод из грея в двоичную */ } /*--------------
----------------------------------------------------------*/ /*--------------------------
----------------------------------------------*/
CapSlowo=(unsigned int)rab1; /* Процедура
формирование слова с соответствием с РТМ */
double rab2; if (rab2>0.5)
SlRab++; /* Процедура тест контроля ПО */ int Vprd1=0,Vmdd1=0,Vprg1=0,Vmdg1=0; Vprd1=Vprd; /* сохраняем Vprd */ if
(Vmdd!=200) { PO_Ok=1; Vmd_Ok=1; } /*----------------------------- 206 --------------------------------------
*/ Priznak_Work(1,0);/* признак тест */ /*--------
--------------------- 207 --------------------------------------*/ Priznak_Work(1,0);/* признак тест */ /*----
--------------- востанавливаем состояния --------------------------*/ Vprd=Vprd1; /* востанавливаем Vprd */ /*-------------------------------------------------------------
-----------*/ /*------------------------------------------------------
------------------*/ /*-------------
-----------------------------------------------------------*/ void Zapusk(void){ /*------------- Запуск
таймера --------------------------*/ asm(" mov a,#0eah "); /*
число для загрузки таймера */ asm(" mov a,#0d3h "); /* равна eah, а младшая - d3h */ /*---------------------------------------------------------
---------------*/ /*----------
--------------------------------------------------------------*/ SlRab_bit28=0; } /* Процедура разовой команды ТЕСТ КОНТРОЛЬ */ int V=0; /*
vvodvpr();*/ /*----------------- Сохраняем тестовое значение
--------------------------*/ /*--------------
--- Тест на наличие Vmd >= Vpr ---------------------------*/ /*--------
--------- Отнимаем тестовое значение ---------------------------*/ /*----------------- Маштабирование Vprd --------------------
--------------*/ SlRab=0; asm(" clr TCON.4 ");/* остановка таймера */ asm(" setb TCON.4 ");/*
запуск таймера */ Priznak_Work(1,0);/* признак функциональный тест
*/ SlVpr_2=SlRab_2; /*-------------
копируем в поле 207 функциональный тест -----------------*/ asm(" clr TCON.4 ");/* остановка таймера */
asm(" setb TCON.4 ");/* запуск таймера */ /*--------
Формирование дискретного 271 слова ----------------------------*/ Priznak_Test();/* растановка признаков
тестирования в слове */ asm(" clr TCON.4 ");/* остановка таймера
*/ asm(" setb TCON.4 ");/* запуск таймера */ Adress=0x61;/* адрес слова 206 */ If_Speed(Vprd);/* проверка на < 50км */ /*------------- Копирование параметров в область вывода --
----------------*/ SlVpr_4=SlRab_4; /*----- Формирование 207 слова в
соответствии с РТМ, изм,3 для Vmd ------*/ Priznak_Usvic();/* признак от УСВИЦ-250
*/ if ((Vmd_Ok==1)(PO_Ok==1)) Priznak_Work(0,0);/*
отказе */ SlVmd_2=SlRab_2; /*-------- Сброс сторожевого таймера --------------------------
-----------*/ /* Процедура очистки переменных
*/ StecVmdd=StecVprd=0; /****************************************************
*********************/ void main(void) Zapusk(); /*----------------- Обнуление данных ----------------------------------
---*/ VivodCapSl(); Priznak_Usvic();/* признак от УСВИЦ-250 */ asm(" clr TCON.4 ");/* остановка таймера */
asm(" setb TCON.4 ");/* запуск таймера */
Priznak_Usvic();/* признак от УСВИЦ-250 */ asm(" clr TCON.4
");/* остановка таймера */ asm(" setb TCON.4 ");/* запуск таймера
*/ ImVxodMd(); /* имитация входа Vmd */ ImVxodPr(); /* имитация входа Vpr */ while (a>0); /*--------
------------ Обновление данных Vpr и Vmd -----------------------*/ StecVmdd=Vmdd; /*Сохранение Vм.д.*/ StecVprd=Vprd; /*Сохранение Vпр.д.*/ /*----------------- Цикл проверки на отказ Vpr -------------
--------------*/ /* if(INT0==1)
Test_Kontrol();*/ if(Vprd>=Vmdd) { RXD=0;
PK_Vpr=1; } Machtab(StecVprd); Priznak_Work(1,0);/* признак функциональныйтест */ SlDs_2=SlRab_2; /*-------------
копируем в поле 206 функциональный тест ----------------*/ asm(" clr TCON.4 ");/* остановка таймера */
asm(" setb TCON.4 ");/* запуск таймера */ Priznak_Work(1,0);/*
признак функциональный тест */ SlVmd_2=SlRab_2; /*----------------- Тест Контроль программы -----------------------------
*/ Adress=0x9d;/* адрес слова 271 */ CalcChetSl();/* подсчет четности
*/ SlDs_4=SlRab_4; /*------ Формирование 206 слова в соответствии с РТМ, изм,3
для Vpr ------*/ Priznak_Work(1,1);/*
признак нормальной работы */ CalcChetSl();/* подсчет
четности */ asm(" clr TCON.4 ");/* остановка таймера */ asm(" setb TCON.4
");/* запуск таймера */ Adress=0xe1;/* адрес
слова 207 */ If_Speed(Vmdd); /* проверка
на < 50км */ asm(" clr TCON.4 ");/* остановка таймера
*/ asm(" setb TCON.4 ");/* запуск таймера */ defseg c_text,class=code Bit6V equ 51h ; Bit6V прямой вывод бита 80 Sl207 equ 3ch ;
адрес слова 207 global
_Timer,_Vivod206,_Vivod207;,_Vivod271 CLR TCON.5 ; Сбpос флага
пеpеполнения 1 MOV A,#high(int38T) ; Выбоp стаpшего
байта INT_38T 1 MOV A,NomParam ; 1 NOP ; 1 INC NomParam ; 1 POP 0E0h ; 2 _Vivod206: CLR PSW.3 ; 1 mkc MOV R0,#Sl206 ; 1 mkс MOV
R2,#7 ; 1 mkс ;----------
---------------------------------------------------------- 0 Pauza206_0: DJNZ R1,Pauza206_0 ; 2*15=30 mkc 36 ;------------------------------------------
-------------------------- 40 Pauza206_1: DJNZ R1,Pauza206_1
; 2*17=34 mkc ;-----------------------------------------------------------
--------- 40 MOV Bit7V,C ; 2 mkс MOV
P0,BaitV ; 2 mkс ;----------------------------------------------------------------
---- 0 DJNZ R3,Bait206 ; 2 mkс 35 NOP ; 1 mkс ;------------------------------------
-------------------------------- 0 RET ; 2
mkc ;**************************************************************************
* PUSH 3 ; 2 mkc ;---------------------------------------
-------------------------------- ;-----------------------------------------
------------------------------ ;-----------------
------------------------------------------------------ Pauza207_0:
DJNZ R1,Pauza207_0 ; 2*15=30 mkc 36 Pauza207_1: DJNZ
R1,Pauza207_1 ; 2*17=34 mkc ;----------------------------------------------
-------------------------- Pauza207_2: DJNZ R1,Pauza207_2 ;
2*16=32 mkc 38 ;------------------------
--------------------------------------------- ;-------
------------------------------------------------------------------ RET ; 2
mkc PUSH 0E0H ; 2 mkc ORL P0,#0C0H ; 2 mkc ;----------------------------
------------------------------------------- ;---
-------------------------------------------------------------------- Pauza271_0: DJNZ R1,Pauza271_0 ; 2*15=30 mkc 36 Pauza271_1:
DJNZ R1,Pauza271_1 ; 2*17=34 mkc ;----------------------------------------------
-------------------------- Pauza271_2: DJNZ R1,Pauza271_2 ;
2*16=32 mkc 38 ;------------------------
--------------------------------------------- ;-------
------------------------------------------------------------------ RET ; 2
mkc Приложен
и 3. Программа вывода приборной скорости на ЦАП. _VivodCapSl: mov p2,a ret Прилож
ение 4. Программа считывания приборной скорости с маски. bitvmd2 equ 2ah bitvmd9 equ 21h orl p0,#1 ;запрещение работы D1
anl p1,#14h ;запрещение D2 и разрешение D4 inc p1 inc p1 orl p1,#11h ;запрет d2 и разрешение d4 inc p1 call Read_P_1_5 mov r3,#30 ;250 Приложение 5.
Программа считывания максимальной допустимой скорости с маски. bitvpr2 equ 0ah bitvpr9 equ 01h orl p0,#1 ;запрещение работы D1 anl
p1,#1 ;запрещение D4 и разрешение D2 inc
p1 inc p1 call Read_P_1_5 orl p1,#10h ;запрещение D2 и разрешение D4 call Read_P_1_5 mov r3,#30 ;250
| |