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

Введение

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

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

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

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

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

1. Анализ технического задания

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

2. Разработка структурной схемы проектируемого устройства

Основу структурной схемы микроконтроллера (рисунок 1) образует внутренняя двунаправленная 8-битная шина, которая связывает между собой все основные узлы и устройства: резидентную память, АЛУ, блок регистров специальных функций, устройство управления и порты ввода / вывода.

Арифметико-логическое устройство. 8-битное АЛУ может выполнять арифметические операции сложения, вычитания, умножения и деления; логические операции И, ИЛИ, исключающее ИЛИ, а также операции циклического сдвига, сброса, инвертирования и т.п. В АЛУ имеются программно недоступные регистры Т1 и Т2, предназначенные для временного хранения операндов, схема десятичной коррекции и схема формирования признаков.

Простейшая операция сложения используется в АЛУ для инкрементирования содержимого регистров, продвижения регистра-указателя данных и автоматического вычисления следующего адреса РПП. Простейшая операция вычитания используется в АЛУ для декрементирования регистров и сравнения переменных.

Простейшие операции автоматически образуют «тандемы» для выполнения в АЛУ таких операций, как, например, инкрементирование 16-битных регистровых пар. В АЛУ реализуется механизм каскадного выполнения простейших операций для реализации сложных команд. Так, например, при выполнении одной из команд условной передачи управления по результату сложения в АЛУ трижды инкрементируется СК, дважды производится чтение из РПД, выполняется арифметическое сравнение двух переменных, формируется 16-битный адрес перехода и принимается решение о том, делать или не делать переход по программе. Все перечисленные операции выполняются в АЛУ всего лишь за 2 мкс.

Важной особенностью АЛУ является его способность оперировать не только байтами, но и битами. Отдельные программно-доступные биты могут быть установлены, сброшены, инвертированы, переданы, проверены и использованы в логических операциях. Эта способность АЛУ оперировать битами столь важна, что во многих описаниях микропроцессора говорится о наличии в нем «булевского процессора». Для управления объектами часто применяются алгоритмы, содержащие операции над входными и выходными булевскими переменными (истина / ложь), реализация которых средствами обычных микропроцессоров сопряжена с определенными трудностями.



Рисунок -1. Структурная схема КР1816ВЕ31

АЛУ может оперировать четырьмя типами информационных объектов: булевскими (1 бит), цифровыми (4 бита), байтными (8 бит) и адресными (16 бит). В АЛУ выполняется 51 различная операция пересылки или преобразования этих данных. Используется 11 режимов адресации (7 для данных и 4 для адресов), путем комбинирования «операция / режим адресации» базовое число команд 111 расширяется до 255 из 256 возможных при однобайтном коде операции

Резидентная память . Память программ и память данных, размещенные на кристалле КР1816ВЕ31, физически и логически разделены, имеют различные механизмы адресации, работают под управлением различных сигналов и выполняют различные функции.

Память программ (ПЗУ или СППЗУ) имеет емкость 4Кбайта и предназначена для хранения команд, констант, управляющих слов инициализации, таблиц перекодировки входных и выходных переменных и т.п. РПП имеет 16-битную шину адреса, через которую обеспечивается доступ из счетчика команд или из регистра-указателя данных. Последний выполняет функции базового регистра при косвенных переходах по программе или используется в командах, оперирующих с таблицами.

Память данных (ОЗУ) предназначена для хранения переменных в процессе выполнения прикладной программы, адресуется одним байтом и имеет емкость 128 байт. Кроме того, к адресному пространству РПД примыкают адреса регистра специальных функций (РСФ), которые перечислены в таблице 3.

Память программ, также как и память данных, может быть расширена до 64Кбайт путем подключения внешних БИС.

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

Таблица 3.1

Символ Наименование Адрес
* АСС Аккумулятор 0Е0Н
* В Регистр-расширитель аккумулятора 0F0Н
* PSW Слово состояния программы 0D0H
SP Регистр-указатель стека 81Н
DPTR

Регистр-указатель данных (DPH)

* P0 Порт 0 80Н
* Р1 Порт 1 90Н
* Р2 Порт 2 0А0Н
* Р3 Порт 3 0В0Н
* IP Регистр приоритетов 0В8Н
* IE Регистр маски прерываний 0А8Н
TMOD Регистр режима таймера / счетчика 89Н
* TCON Регистр управления / статуса таймера 88Н
TH0 Таймер 0 (старший байт) 8СН
TL0 Таймер 0 (младший байт) 8АН
TH1 Таймер 1 (старший байт) 8DН
TL1 Таймер 1 (младший байт) 8BН
Символ Наименование Адрес
* SCON Регистр управления приемопередатчиком 98Н
SBUF Буфер приемопередатчика 99Н
PCON Регистр управления мощностью 87Н

Примечание. Регистры, имена которых отмечены знаком (*), допускают адресацию отдельных бит.

Таблица. 3.2

Символ Позиция Имя и назначение
С PSW.7 Флаг переноса. Устанавливается и сбрасывается аппаратурными средствами или программой при выполнении арифметических и логических операциях
АС PSW.6 Флаг вспомогательного переноса. Устанавливается и сбрасывается только аппаратурными средствами при выполнении команд сложения и вычитания и сигнализирует о переносе или займе в бите 3.
F0 PSW.5 Флаг 0. Может быть установлен, сброшен или проверен программой как флаг, специфицируемый пользователем.
Выбор банка регистров. Устанавливается и сбрасывается программой для выбора рабочего банка регистров (см. примечание)
OV PSW.2 Флаг переполнения. Устанавливается и сбрасывается аппаратно при выполнении арифметических операций.
PSW.1 Не используется.
Р PSW.0 Флаг паритета. Устанавливается и сбрасывается аппаратно в каждом цикле команды и фиксирует нечетное / четное число единичных бит в аккумуляторе, т.е. выполняет контроль по четности.

Примечание. Выбор рабочего банка регистров

RS1 RS0 Банк Границы адресов
0 0 0 00Н-07Н
0 1 1 08Н-0FH
1 0 2 10H-17H
1 1 3 18H-1FH

При выполнении многих команд в АЛУ формируется ряд признаков операции (флагов), которые фиксируются в регистре ССП. В таблице 4 приводится перечень флагов ССП, даются их символические имена и описываются условия их формирования.

Наиболее «активным» флагом ССП является флаг переноса, который принимает участие и модифицируется в процессе выполнения множества операций, включая сложение, вычитание и сдвиги. Кроме того, флаг переноса (С) выполняет функции «булевого аккумулятора» в командах, манипулирующих с битами. Флаг переполнения (OV) фиксирует арифметическое переполнение при операциях над целыми числами со знаком и делают возможным использование арифметики в дополнительных кодах. АЛУ не управляет флагами селекции банка регистров (RS0, RS1), и их значение полностью определяется прикладной программой и используется для выбора одного из четырех регистровых банков.

Структурная схема микроконтроллерной системы приведена в графической части курсового проекта приложение А

3. Разработка функциональной схемы микроконтроллерной системы

Разработка подсистемы памяти

В микроконтроллерных системах, построенных на основе КР1816ВЕ31, возможно использование двух типов внешней памяти: постоянной памяти программ (ВПП) и оперативной памяти данных (ВПД). Доступ к ВПП осуществляется при помощи управляющего сигнала RD, который выполняет функцию строб-сигнала, чтения. Доступ к ВПД обеспечивается управляющими сигналами RD и WR, которые формируются в линиях Р3.7 и Р3.6 при выполнении портом 3 альтернативных функций.

При обращении к ВПП всегда используется 16-битный адрес. Доступ к ВПД возможен с использованием 16-битного адреса (MOVXA,@DPTR) или 8-битного адреса (MOVXA,@RI).

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

Если очередной цикл внешней памяти (MOVXA,@DPTR) следует не сразу же за предыдущим циклом внешней памяти, то неизменяемое содержимое регистра-защелки порта 2 восстанавливается в следующем цикле. Если используется 8-битный адрес (MOVXA,@RI), то содержимое регистра-защелки порта 2 остается неизменным на его внешних выводах в течение всего цикла внешней памяти.

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

При любом обращении к внешней памяти устройство управления КР1816ВЕ31 загружает в регистр защелку порта 0 код 0FFH, стирая тем самым информацию, которая могла в нем храниться.

Доступ к ВПП возможен при выполнении двух условий: либо на вход отключения резидентной памяти программ () подается активный сигнал, либо содержимое счетчика команд превышает значение 0FFFH. Наличие сигнала необходимо для обеспечения доступа к младшим 4К адресам адресного пространства ВПП при использовании КР1816ВЕ31.

Основная функция сигнала САВП – обеспечить временное согласование передачи из порта 0 на внешний регистр младшего байта адреса в цикле чтения из ВПП. Сигнал САВП приобретает значение 1 дважды в каждом машинном цикле. Это происходит даже тогда, когда в цикле выборки нет обращения к ВПП. Доступ к ВПД возможен только в том случае, если сигнал САВП отсутствует. Первый сигнал САВП во втором машинном цикле команды MOVX блокируется. Следовательно, в любой МК-системе, не использующей ВПД, сигнал САВП генерируется с постоянной частотой, равной 1/16 частоты резонатора, и может быть использован для синхронизации внешних устройств или для реализации различных временны функций.

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

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

Микроконтроллер КР1816ВЕ31 не имеет внутренней памяти программ и поэтому пользуется только внешней памятью, которую можно модифицировать путем перепрожига внешней микросхемы ПЗУ.

Тип микропроцессора К1816ВЕ31. Объем внешнего ОЗУ – 4Кбайт. В данном микропроцессоре (в соответствии со структурой команд) внешняя адресация памяти данных позволяет адресовать 64Кбай внешней памяти. Для разработки подсистемы памяти выбираем микросхему в соответствии с перечнем элементов, приведенных в приложении Г.

Разработка подсистемы временных характеристик

Регистры специальных функций . Регистры с символическими именами IP, IE, TMOD, TCON, SCON и PCON используются для фиксации и программного изменения управляющих бит и бит состояния схемы прерывания, таймера / счетчика, приемопередатчика последовательного порта и для управления мощностью электропитания КР1816ВЕ31

Последовательный порт К1816ВЕ31 может работать в четырех различных режимах.

Режим 0. В этом режиме информация и передается и принимается через внешний вывод входа приемника (RXD). Принимаются или передаются восемь бит данных. Через внешний вывод выхода передатчика (ТXD), выдаются импульсы сдвига, которые сопровождают каждый бит. Частота передачи бита информации равна 1/12 частоты резонатора.

Режим 1 . В этом режиме передаются через ТXD или из RXD принимаются десять бит информации: старт-бит (0), восемь бит данных и стоп-бит. Скорость приема / передачи – величина переменная и задается таймером.

Режим 2 . В этом режиме передаются через ТXD или из RXD принимаются одиннадцать бит информации: старт-бит, восемь бит данных, программируемый девятый бит и стоп-бит. При передаче девятый бит данных может принимать значение 0 или 1, или, например, для повышения достоверности передачи путем контроля по четности в него может быть помещено значение признака паритета из слова состояния программы (PSW.0). Частота приема / передачи выбирается программой и может быть равна либо 1/32, либо 1/64 частоты резонатора в зависимости от управляющего бита SMOD.

Режим 3 . Совпадает с режимом 2 во всех деталях, за исключением частоты приема / передачи, которая является величиной переменной и задается таймером.

Управление режимом работы УАПП осуществляется через специальный регистрSCON. Этот регистр содержит не только управляющие биты, определяющие режим работы последовательного порта, но и девятый бит принимаемых или передаваемых (RB8 и TB8) и биты прерывания приемопередатчика (RI и TI).

Прикладная программа путем загрузки в старшие биты спецрегистра SCON 2-битного кода определяет режим работы УАПП. Во всех четырех режимах работы передача из УАПП инициируется любой командой, в которой буферный регистр SBUF указан как получатель байта. Прием в УАПП в режиме 0 осуществляется при условии, что RI=0 и RЕN=1. В режиме 1,2,3 прием начинается с приходом старт-бит, если RЕN=1.

В бите ТВ8 программно устанавливается значение девятого бита данных, который будет передан в режиме 2 или 3. В бите RВ8 фиксируется в режимах 2 и 3 девятый принимаемый бит данных. В режиме 1, если SМ2=0, в бит RВ8 заносится стоп-бит. В режиме 0 бит RВ8 не используется.

Флаг прерывания передатчика TIустанавливается аппаратно в конце периода передачи восьмого бита в режиме 0 и в начале передачи стоп-бита в режиме 1,2 и 3. Соответствующая подпрограмма обслуживания должна сбрасывать бит ТI.

Флаг прерывания приемника RIустанавливается аппаратно в конце периода передачи восьмого бита в режиме 0 и в середине приема стоп-бита в режиме 1,2 и 3. Подпрограмма обслуживания прерывания должна сбрасывать бит RI.

Скорость приема / передачи информации по линии связи определяется в начале работы над курсовым проектом и равна 600 бод.

Программируемый таймер находится внутри микроконтроллера К1816ВЕ31.

Таймер/счетчик . В составе средств КР1816ВЕ31 имеются регистровые пары с символическими именами TH0, TL0 и TH1, TL1, на основе которых функционируют два независимых программно-управляемых 16-битных таймера / счетчика событий.

Два программируемых 16-битных таймера / счетчика (Т/С0 и Т/С1) могут быть использованы в качестве таймеров или счетчиков внешних событий. При работе в качестве таймера содержимое Т/С инкрементируется в каждом машинном цикле, т.е. через каждые 12 периодов резонатора. При работе в качестве счетчика содержимое Т/С инкрементируется под воздействием перехода из 1 в 0 внешнего входного сигнала, подаваемого на соответствующий (Т0, Т1) вывод К1816ВЕ31. Опрос значения внешнего входного сигнала выполняется в момент времени S5P2 каждого машинного цикла. Содержимое счетчика будет увеличено на 1 в том случае, если в предыдущем цикле был считан входной сигнал высокого уровня (1), а в следующем – сигнал низкого уровня (0). Новое значение счетчика будет сформировано в момент S3P1 в цикле в следующем за тем, в котором был обнаружен переход сигнала из 1 в 0. Так как на распознавание перехода требуется два машинных цикла, то максимальная частота подсчета входных сигналов равна 1/24 частоты резонатора. На длительность периода входных сигналов ограничений сверху нет. Для гарантированного прочтения входного считаемого сигнала он должен удерживать значение 1 как минимум в течении одного машинного цикла К1816ВЕ31.

Для управления режимами работы Т/С и для организации взаимодействия таймеров с системой прерывания используются два регистра специальных функций (РРТС и РУСТ). Как следует из описания управляющих бит РРТС, для обоих Т/С режимы работы 0, 1 и 2 одинаковы. Режимы 3 для Т/С0 и Т/С1 различны. Рассмотрим кратко работу Т/С во всех четырех режимах.

Режим 0 . Перевод любого Т/С в режим 0 делает его похожим на таймер МК48 (8-битный счетчик), на вход которого подключен 5-битный предделитель частоты на 32. В этом режиме таймерный регистр имеет разрядность 13 бит. При переходе из состояния» все единицы» в состояние «все нули» устанавливается флаг прерывания от таймера TF1. Входной синхросигнал таймера 1 разрешен (поступает на вход Т/С), когда управляющий бит TR1 установлен в 1 и либо управляющий бит GATE (блокировка) равен 0, либо выход запроса прерывания поступает уровень 1.

В таблице 8 приведены регистры режима работы таймера / счетчика, а в таблице 9 регистры управления / статуса таймера.

Установка бита GATE в 1 позволяет использовать таймер для измерения длительности импульсного сигнала, подаваемого на вход запроса прерывания.

Таблица 4.2.1

Символ Позиция Имя и назначение
GATE TMOD.7 для T/С1 и TMOD.3 для T/C0 Управление блокировкой. Если бит установлен, то таймер / счетчик «х» разрешен до тех пор, пока на входе «INTx» высокий уровень и бит управления «TRx» установлен. Если бит сброшен, то Т/С разрешается, как только бит управления «TRx» устанавливается.
TMOD.6 для T/С1 и TMOD.2 для T/C0 Бит выбора режима таймера / счетчика событий. Если бит сброшен, то работает таймер от внутреннего источника сигналов синхронизации. Если бит установлен, то работает счетчик от внешних сигналов на входе «Тх».
М1 TMOD.5 для T/С1 и TMOD.1 для T/C0 Режим работы (см. примечание).
М0 TMOD.4 для T/С1 и TMOD.0 для T/C0
М1 М0 Режим работы
0 0 Таймер МК48. «TLx» работает как 5-битный предделитель.
0 1 16-битный таймер / счетчик. «THx» и «TLx» включены последовательно.
1 0 8-битный автоперезагружаемый таймер / счетчик. «THx» хранит значение, которое должно быть перезагружено в «TLx» каждый раз по переполнению.
1 1 Таймер/счетчик1 останавливается. Таймер/счетчик0: TL0 работает как 8-битный таймер / счетчик, и его режим определяется управляющими битами таймера0.TH0 работает только как 8-битный таймер, и его режим определяется управляющими битами таймера1.

Режим 1 . Работа любого Т/С в режиме 1 такая же, как и в режиме 0, за исключением того, что таймерный регистр имеет разрядность 16 бит.

Режим 2 . В режиме 2 работа организована таким образом, что переполнение (переход из состояния» все единицы» в состояние «все нули») 8-битного счетчика TL1 приводит не только к установке флага TF1, но и автоматически перезагружает в TL1 содержимое старшего байта (TH1) таймерного регистра, которое предварительно было задано программным путем.

Режим 3 . В режиме 3 Т/С0 и Т/С1 работают по разному. Т/С 1 сохраняет неизменным свое текущее содержимое. Иными словами, эффект такой же как и при сбросе управляющего бита TR1 в ноль.

В режиме 3 TL0 и TH0 функционируют как два независимых 8-битных счетчика. Работу TL0 определяет управляющие биты Т/С 0 (, GATE, TR0), входной сигнал и флаг переполнения TF0. Работу ТН0, который может выполнять только функции таймера (подсчет машинных циклов МК), определяет управляющий бит TR1. При этом ТН0 использует флаг переполнения TF1.

Разработка подсистемы связи с центральной ЭВМ

Проектируемое устройство должно выдавать содержимое памяти в центральную ЭВМ, а также принимать информацию от центральной ЭВМ.

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

В состав УАПП, называемого часто последовательным портом, входят принимающий и передающий сдвигающий регистры, а также специальный буферный регистр (SBUF) приемопередатчика. Запись байта в буфер приводит к автоматической переписи байта в сдвигающий регистр передатчика и инициирует начало передачи байта. Наличие буферного регистра приемника позволяет совмещать операцию чтения ранее принятого байта с приемом очередного байта. Если к моменту окончания приема байта предыдущий байт не был считан из SBUF, то он будет потерян.

Управление режимом работы УАПП осуществляется через специальный регистр с символическим именем SCON. Этот регистр содержит не только управляющие биты, определяющие режим работы последовательного порта, но и девятый бит принимаемых или передаваемых данных (RB8 и TB8) и биты прерывания приемопередатчика (R1 и T1).


Таблица 4.5.1

Символ Позиция Имя и назначение
TF1 TCON.7 Флаг переполнения таймера1. Устанавливается аппаратурно при переполнении таймера / счетчика. Сбрасывается при обслуживании прерывания аппаратурно
TR1 TCON.6 Бит управления таймера 1. Устанавливается/сбрасывается программой для пуска / останова.
TF0 TCON.5 Флаг переполнения таймера1. Устанавливается аппаратурно. Сбрасывается при обслуживании прерывания
TR0 TCON.4 Бит управления таймера 0. Устанавливается/сбрасывается программой для пуска / останова. таймера / счетчика.
IE1 TCON.3
IT1 TCON.2 Бит управления типом прерывания 1. Устанавливается / сбрасывается программой для спецификации запроса (срез / низкий уровень).
IE0 TCON.1 Флаг фронта прерывания 1. Устанавливается аппаратурно, когда детектируется срез внешнего сигнала . Сбрасывается при обслуживании прерывания
IT0 TCON.0 Бит управления типом прерывания 0. Устанавливается / сбрасывается программой для спецификации запроса (срез / низкий уровень).

Режим 3 используется в тех случаях применение К1816ВЕ31, когда требуется наличие дополнительного 8-битного таймера или счетчика событий. Можно считать, что в режиме 3 К1816ВЕ31 имеет в своем составе 3 таймера / счетчика. В том случае, если Т/С0 используется в режиме 3, Т/С1 может быть или включен или выключен, или переведен в свой собственный режим 3, или может быть использован последовательным портом в качестве генератора частоты передачи, или, на конец, может быть использован в любом применении, не требующим прерывания.

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

5. Разработка принципиальной схемы проектируемого устройства

Выбор элементной базы

В контроллере, разрабатываемом в данном курсовом проекте, в качестве центральной части используется однокристальная микроЭВМ КМ1816ВЕ31, выполненная на основе высокоуровневой n -МОП технологии и взаимодействующая со средой в стандарте ТТЛ-схем с тремя состояниями выхода. Это позволяет при разработке схемы использовать ИС из микропроцессорного комплекта серии 580 быстродействующие ТТЛ серии. Как указывалось выше, в состав микроконтроллера входит программируемый таймер, асинхронный последовательный интерфейс (УАПП) и ПЗУ емкостью 1 Кб.

Для построения проектируемого устройства была выбрана следующая элементная база:

Программируемый контроллер клавиатуры и индикации КР580ВВ79;

Статическое ОЗУ емкостью 16Кб АТ28С128;

Блок семисегментных индикаторов АЛС318;

Буферный регистр К1533ИР22;

ПЗУ К573РУ8;

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

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

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

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

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

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

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

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

В разработке использован ПККИ типа КР580ВВ79. Его настройка осуществляется загрузкой управляющего слова «установка режима работы контроллера клавиатуры и индикации» в соответствующий регистр блока управления. Режим работы блока интерфейса клавиатуры: последовательный опрос матрицы клавиш с дешифрированием состояния счетчика сканирования и запрещением 2-х или более нажатых клавиш. Режим работы блока индикации: вывод символов на 8-разрядную индикацию с размещением их слева направо.

Рисунок 6.2 – Формат управляющего слова «программный сброс»

Разряды D7 – D5 – адрес управляющего слова «программный сброс»;

Разряды D4 = 0 – коды находящиеся во внутреннем ОЗУ индикации выдаются на выходы OUT; D1 = 1 – обнуление регистра состояния ОЗУ клавиатуры и на выходе IRQ – сигнал низкого уровня; D0 ºD4.


Рисунок 6.4 – Формат управляющего слова «запись в ОЗУ индикации»

Разряды D7-D5 – адрес управляющего слова; D3-D0 – адрес ячейки ОЗУ индикации.

Формат управляющего слова «Чтение многорежимного ОЗУ клавиатуры» аналогичен формату управляющего слова «Чтение из ОЗУ индикации», за исключением содержимого битов D7-D5.

0 1 0 1 х х х х

Рисунок 6.5 – Формат регистра управляющего слова клавиатуры

Разряды D7-D5 – адрес управляющего слова; D4 – признак автоинкремента; D3-D0 – адрес ячейки ОЗУ клавиатуры.

Подпрограмма инициализации программируемого параллельного интерфейса

Настройка ППИ осуществляется загрузкой управляющего слова в регистр управляющего слова. Настройка производится следующим образом: порт А работает в режиме ввода информации с датчиков через АЦП, а порт В работает в режиме вывода информации на ЦАП. Порт С будет управлять процессами приема и выдачи информации.

В разработанной системе ППИ работает в 0 режиме. Функции этого режима:

1) Два 8-ми разрядных и два 4-х разрядных порта.

2) Все порты могут быть как входными, так и выходными.

3) Выходные порты защелкиваются, входные – нет.

Формат регистра управляющего слова ППИ представлен на рис. 6.6.

Рисунок 6.7 – Формат регистра SCON.

SM1 и SM0 (D7, D6) – определяют режим работы последовательного порта (Режим 2: 9-ти разрядный асинхронный приемопередатчик, фиксированная скорость приемопередачи);

REN (D4) – флаг управления разрешением приема;

TB8 (D3) – установка состояния 9-го бита принимаемых данных;

RB8 (D2) – анализ состояния 9-го бита принимаемых данных;

TI (D1) – бит прерывания по передачи;

RI (D0) – бит готовности.

Подпрограмма опроса клавиатуры

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

Подпрограмма выдача данных на индикаторы

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

Опрос датчиков и выдача выходных сигналов

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

1) в счетчик заносится количество опрашиваемых датчиков;

2) информация считывается с датчиков в порт А, который ранее был проинициализирован на прием данных;

3) принятая информация переписывается через аккумулятор в специально отведенную для информации с датчиков ячейку ОЗУ;

4) уменьшение счётчика количества датчиков на 1;

5) если произошел опрос всех датчиков, то ППИ перестраивается на выдачу информации из порта В;

6) в счетчик заносится количество выходных сигналов;

7) информация из ячейки ОЗУ через аккумулятор заносится в порт В;

8) производится вывод информации.

Подпрограмма обмена информацией с центральной ЭВМ

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

Подпрограмма инициализации таймера

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

Рисунок 6.9 – Формат регистра TMOD.

Регистр TMOD задает режимы работы Т/С0 и Т/С1. Устанавливаем для Т/С1 первый режим работы: 16-битный таймер / счетчик. TH1 и TL1 включены последовательно. При переходе из состояния» все единицы» в состояние «все нули» устанавливается флаг прерывания от таймера TF1. Входной синхросигнал таймера 1 разрешен (поступает на вход Т/С), когда управляющий бит TR1 установлен в 1 и либо управляющий бит GATE (блокировка) равен 0, либо выход запроса прерывания поступает уровень 1.), блокировка отключена, таймер работает от внутреннего источника сигналов синхронизации.

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

Производится заполнение таймерных регистров:

В TH1 записывается FEh

В TL1 записывается EBh

Значения TH1 и TL1, обновляются в соответствующих процедурах прерываний.


Заключение

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

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

Перечень источников

1. Цифровые и аналоговые интегральные микросхемы: Справочник / под ред. С.В. Якубовского. – М: Радио и связь, 1990. – 496 с.

2. Микропроцессоры / К.Г. Самофалов, О.В. Викторов – Киев: Техника, 1989. – 312 с.

3. Справочник по цифровой схемотехнике / И.В. Зубчук, В.П. Сигорский. – К.: Техника, 1990 г. – 448 с.

4. Микросхемы ЦАП и АЦП: функционирование, параметры, применение / Б.Г. Федорков, В.А. Телец – М.: Энергоатомиздат, 1990. 320 с.

5. Сташин В.В., Урусов И.А. Мологонцева И.А. Проектирование цифровых устройств на однокристальных микро-ЭВМ. М. Энергоатомиздат –1990 – 285 с.

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

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

Следует отметить, что количество структур, вообще говоря, ограничено теми рамками, которые были рассмотрены в предыдущем разделе. Так как время разработки и освоения систем в производстве становится соизмеримым с ее жизненным циклом (временем ее целесообразного существования до появления конкурентоспособного аналога), то необходимо:

· стремиться использовать уже известные типовые решения при поддержке пакетов САПР, ориентированных на разработку МПС (хотя творчески работающему специалисту хочется создать нечто оригинальное);

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

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

Рис.64

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

Рассмотрим более подробно каждый из этапов.

Формулировка проблемы.

На рис.65 дана последовательность работ, раскрывающая суть этапа "Формулировка проблемы".

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


Рис.65

Основными критериями достижения цели на этом шаге можно считать:

1. Быстроту разработки и организации серийного производства.

2. Эффективность применения (особенно его наглядность).

3. Минимальность затрат (быструю окупаемость). Некоторую по­мощь здесь может оказать табл.1.

Таблица 1

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

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

Рис.66 Рис.67
Рис.68

Если принято решение о создании АСУ, приступают к определению ее макрофункций: сбор данных, советник оператора, непосредственное или супервизорное управление. Целью режима "Сбор данных" (см. рис.67) является накопление информации о состоянии ТОУ при различных условиях для построения модели процесса (когда она неполна или неизвестна) и/или управления им со знанием ситуации. Данный режим всегда присутствует как подзадача в более сложных макрофун­кциях. Его особенность - разомкнутый контур управления, т.е. в качестве решающего устройства используется человек, а МП выполняет функции предпроцессора сбора/предварительной обработки данных и постпроцессора для формирования управляющих воздействий по закону, заданному человеком. В режиме "Советник оператора" помимо сбора данных МПС вычисляет по известной модели (или ее части) управляющие воздействия и предлагает их оператору, который и принимает решение. Число управляемых переменных невелико, чтобы человек был в состоянии удержать их в поле зрения и своевременно реагировать на изменение ситуации.

Замкнутый контур управления характерен для режима "Непосредственное управление" . В этом случае АСУ отличается от САУ тем, что уставки в системе (рис.68) формируются человеком. Высшей макрофункцией АСУ является "Супервизорное управление" . Система состоит из автономного контура управления ТОУ и контура управления уставкой для него. Человек же осуществляет контроль за появлением непредвиденных ситуаций.

И в завершение этапа осуществляется разработка технического задания (ТЗ) на основе исходных данных: конструкторской документации на оборудование, используемое в техпроцессе (включая принципиальные схемы); технологической документации на процесс, требований к выпускаемой продукции, функционированию процесса произ­водства; экономических, социальных, антропогенных, экологических и других ограничений; концепции построения МПС. Определяются текущие (и, возможно, будущие) задачи, решаемые МПС, ограничения на ее функционирование и создание по производительности, габаритам, потреблению, надежности, стоимости и т.д.

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

Министерство общего и профессионального образования

Российской Федерации

Тульский Государственный Университет

Кафедра Электронных Вычислительных Машин

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

к курсовому проекту по дисциплине «Микропроцессорные системы»

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

Специальность: 220100

Обозначение КП: К2.006.106

Руководитель работы: Венцлавович Ю.Р.

ВВЕДЕНИЕ

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

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

Задачами курсового проекта является:

· практическое овладение методикой проектирования микропроцессорных систем;

· анализ вариантов проектных решений и выбор на его основе оптимального решения;

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

· получение навыков разработки аппаратного и программного обеспечения микропроцессорной системы;

· дальнейшее развитие навыков функционально-логического, схемотехнического и конструкторского проектирования, оформления и выпуска конструкторской документации в соответствии с ГОСТ.

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

ТЕХНИЧЕСКОЕ ЗАДАНИЕ

1. Алгоритм обработки входных данных.

Модель объекта заданна уравнением:

где: ai (i=1,…,r) и bi (i=1,…,l) - неизвестные параметры;

xn - ненаблюдаемый шум;

xn-i и zn-i - наблюдаемые переменные.

Оценки параметров определяются итерационной процедурой фильтра Калмана:


где: j = T

q = T

s02 - дисперсия независимого ненаблюдаемого шума xn

1. Характеристики входной информации:

число источников входной информации - 8;

мин/макс уровень изменения входных сигналов - 3/4;

минимальная дисперсия погрешности измерений, ґґ10-2 - ssи2 = 5;

максимальная дисперсия погрешности измерений, ґґ10-2 - ssc2 = 50;

1. Требуемые характеристики выходной информации:

число потребителей выходной информации - 1;

ограничение на время запаздывания выходной информации относительно входной (время формирования ответной реакции), мс - 0,15;

2. Требуемые общие характеристики МПС:

тип связи с источником входной информации - последовательная;

тип связи с потребителем выходной информации - последовательная;

3. Конструктивные параметры:

корпус Desktop - 152х533х419мм

тип платы - Baby-AT 8,57х13,04 дюйма

тип монитора - SVGA 15"

блок питания - 250 Вт

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

Климатические факторы

изменение температуры окружающей среды

пониженная температура, Со -50

время выдержки, час 2-6

повышенная температура, Со 60

время выдержки, час 2-6

повышенная влажность

относительная влажность, % 93

температура, Со 40

время выдержки, час 72

пониженная температура

предельная -50

рабочая -10

повышенная температура

предельная 50

рабочая 60

пониженное давление

температура -10

давление, Па 6,1*104

время выдержки, час 2-6

атмосферные осадки

интенсивность дождя, мм/мин 3

время выдержки, час 0,33

морской туман

температура 27

время выдержки, час 48

Механические

вибрации на одной частоте

частота, Гц 20

ускорение, g 2

время выдержки, час 0,5

вибрации в диапазоне частот

диапазон частот, Гц 10-70

ускорение, g 0,8-3,8

удары многократные

число в минуту 40-80

ускорение, g 15

общее число ударов 12000

АНАЛИЗ АЛГОРИТМА ВЫЧИСЛЕНИЙ

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


Входной информацией в данном курсовом проекте является входные и выходные значения параметров идентифицируемого объекта (xn и zn). Графически алгоритм вычисления вектора оценок q = изображен на рис. 2.

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

ОПРЕДЕЛЕНИЕ СОСТАВА МПС

Центральную часть разработанной структуры микропроцессорной системы составляет центральный процессор, построенный на основе микропроцессора (МП) и выполняющий основные функции процесса обработки информации и управления этим процессом. Внутренняя память МПС (для хранения программ и данных) - полупроводникового типа, размещается на одной плате вместе с CPU, она представлена в виде модулей постоянной (ROM). Микропроцессор управляется генератором синхросигналов (G). В системе также присутствует математический сопроцессор (FPU).

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

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

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

Длительность цикла Тс определяется из выражений:

1. Разрядность АЦП

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


где h - шаг дискретизации по уровню сигнала

1. Точность преобразования


1. Время преобразования

1. Длительность цикла

где tn - время преобразования значения сигнала в цифровой код,

m - количество источников входной информации.

Определив ограничение на длительность Тс, можно определить ограничение на длительность такта работы процессора


РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

Листинг программы оценки параметров объекта приведен в приложении 3.

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

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

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

Обмен с внешней средой осуществляется через 8-ми разрядные последовательные порты ввода/вывода за один цикл ввода и вывода соответственно. Программное обеспечение оптимизировано по скорости выполнения для выбранного микропроцессора и использует преимущества 32-х разрядной обработки данных и взаимодействия с внешними устройствами.

ВЫБОР МПК И РАЗРАБОТКА АРХИТЕКТУРЫ МПС

Выбор осуществлялся между МПК на базе процессора 8086 и МПК на базе процессора 80386 фирмы Intel. Для оценки времени задержки выходных данных посчитаем количество тактов, необходимое каждому процессору для выполнения расчетов. Результаты сравнения представлены в таблице 1.

Таблица 1


При частоте синхронизации 33 МГц, время одного такта составляет 30 нс, из чего следует, что время необходимое для приема, обработки и выдачи результата составляет:

*4892 = 146760 нс = 0.147 мс,

при допустимом времени задержки 0.15 мс.

Таким образом, был выбран микропроцессорный комплект на базе микропроцессора 80386 фирмы Intel с частотой 33 МГц, который наиболее полно удовлетворяет предъявленным требованиям и ограничениям. Этот МПК является однокристальным микропроцессором с фиксированной системой команд и архитектурой. С помощью интерфейсных БИС и прикладного программного обеспечения осуществляется настройка МПС на заданный класс алгоритмов. При проектировании МПС требуются средства подготовки и отладки программ.

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

МПС, для реализации своих задач, содержит в своем составе следующий набор БИС:

· центральный процессор i80386;

· арифметический сопроцессор i80387;

· генератор тактовой частоты 82384;

· приемопередатчик данных 8286;

· защелки адреса 8282;

· МС статического ОЗУ КМ185РУ8, МС ПЗУ КР556РТ20 и набор МС, формирующих управляющие сигналы (1533ИД3, 1533ИД14, 1533ЛА3);

· МС универсального синхронно-асинхронного приемопередатчика (KP580BB51A), предназначенную для последовательного протокола обмена данными.

ПРОЕКТИРОВАНИЕ ПРОЦЕССОРА МПС

проектирование микропроцессорный программный

На этом этапе разрабатывается процессор. Исходной информацией при разработке процессора является его архитектура. На ее основании разрабатывается структура процессора и его интерфейс с системной шиной.

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

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

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

Состав средств доступа к СШ определяется типом шины. Разрабатываемая МПС является однопроцессорной и в ней используется однопользовательская СШ. В этом случае шиной управляет сам процессор и дополнительных средств управления не требуется.

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

Расчет нагрузочной способности шины адреса:

Т.к. в один момент времени может работать модуль ОЗУ или модуль ПЗУ.

Iвых182 = max{4* IвхПЗУ1, 4* IвхОЗУ1} = max{4*4×10-5, 4*0.04} = 0.16mA £ 32mA

Iвых082 = max{4* IвхПЗУ0, 4* IвхОЗУ0} = max{4*0.25, 4*0.45} = 1.8mA £ 5 mA

Расчет нагрузочной способности шины данных:

Т.к. в один момент времени может работать модуль ОЗУ или порт вывода.

Iвых186 = max{IвхОЗУ1, IвхIOP1} = max{0.04, 0.0007} = 0.04mA £ 32mA

Iвых086 = max{IвхОЗУ0, IвхIOP0} = max{0.3, 0.05} = 0.3mA £ 5mA

Расчет нагрузочной способности линий CS для ОЗУ и ПЗУ из дешифратора:

Iвых1DC = max{4* IвхПЗУ1, 4* IвхОЗУ1} = max{4*4×10-5, 4*0.04} = 0.16mA £ 0.4mA

Iвых0DC = max{4* IвхПЗУ0, 4* IвхОЗУ0} = max{4*0.25, 4*0.9} = 3.6mA £ 8 mA

Расчет нагрузочной способности линий W/R для ОЗУ из МС 8282:

Iвых182 = 4* IвхОЗУ1 = 4*0.04 = 0.16mA £ 32mA

Iвых082 = 4* IвхОЗУ0 = 4*0.45 = 1.80mA £ 5mA

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

Тактовый генератор 82384, используемый в системах на базе МП i80386, вырабатывает тактовые сигналы для выполнения синхронных операций различных компонентов системы. На выходе CLK2 схемы генератора формируются импульсы с частотой равной частоте внешнего кварца (33 МГц), а на выходе CLK - с частотой вдвое меньшей. Сигналы на выходе CLK и сигналы внутренней синхронизации МП совпадают по фазе. Выравнивание фаз этих сигналов происходит по срезам сигнала RESET.

Сигнал RESET служит для установки в исходное состояние МП и других компонентов системы и формируется генератором от внешней RC - цепочки. Сигнал ADS# обеспечивает требуемые времена установки и удержания для сигнала CLK2, а сигнал ADS0# используется совместно с CLK для управления периферийными устройствами. Вывод F/C# заземляется, т.к. применяется кварцевый резонатор.

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

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

Арифметический сопроцессор 80387 сконструирован для полностью синхронной, либо псевдосинхронной работы с МП 80386. В псевдосинхронном режиме интерфейсная логика сопроцессора 80387 работает от тактового сигнала МП 80386, тогда как его внутренняя логика работает от другого тактового сигнала. Когда МП 80386 работает с сопроцессором 80387, он выполняет все необходимые магистральные циклы с памятью и передачи данных в 80387 и из него. Все передачи с сопроцессором 80387 являются 32-разрядными.

Между МП 80386 и сопроцессором 80387 имеются следующие соединения:

· выходы BUSY#, ERROR#, PEREQ сопроцессора 80387 подключаются к соответствующим выводам МП 80386;

· вход RESET сопроцессора 80387 подключается к выходу RESET тактового генератора 82384;

· входы выбора микросхемы арифметического сопроцессора 80387 (CS1#, CS2) непосредственно подключаются к выходам M/IO# и A31 соответственно. Для циклов с сопроцессором сигнал А31 всегда имеет высокий уровень, а сигнал M/IO# - всегда низкий уровень напряжения;

· вход команды сопроцессора 80387 (CMD0#) отделяет данные от команд. Этот вход подключается к выходу А2. МП 80386 выводит адрес 800000F8h при записи команды, и адрес 800000FCh - при записи или считывании данных;

· все 32 линии (D31-D0) шины данных МП 80386 непосредственно подключаются к шине данных сопроцессора 80387;

· входы READY#, ADS#, W/R# сопроцессора 80387 подключаются к соответствующим выводам МП 80386. Сопроцессор 80387 использует сигналы READY# и ADS# для отслеживания активности магистрали и того момента времени, когда могут быть опрошены сигналы W/R#, CS1#, CS2 и сигналы разрешения состояния (STEN);

· сигнал STEN является сигналом выбора микросхемы 80387. Он может быть установлен на высоком уровне напряжения. Если же один и тот же МП 80386 работает с несколькими сопроцессорами 80387, то сигнал STEN может использоваться для активизации одного из них в конкретный момент времени;

· выход готовности (READYO#) является дополнительным выходом. Он может быть использован для генерации состояния ожидания, требуемого сопроцессором.

Если МП 80386 обнаруживает команду сопроцессора, он автоматически генерирует один или более циклов ввода-вывода по адресам 800000F8H и 800000FCH. Процессор выполняет все необходимые магистральные циклы с памятью и передачи к сопроцессору 80387 и от него. Все обмены с сопроцессором 80387 являются 32-разрядными. Если по какой-либо причине используется 16-разрядная подсистема памяти, то МП 80386 автоматически выполняет преобразования перед передачей данных к арифметическому сопроцессору или от него.

Передача данных от сопроцессора 80387 к МП 80386 требует по крайней мере одного состояния ожидания. Циклы записи в сопроцессор 80387 не требуют состояний ожидания. Поскольку интерфейс с МП 80386 всегда синхронный, то вывод CLK2 сопроцессора 80387 должен быть подключен ко входу CLK2 МП 80386. Состояние входа СКМ сопроцессора 80387 определяет, в каком из двух режимов он работает.

В псевдосинхронном режиме сигнал СКМ имеет низкий уровень. Ко входу CLK2 сопроцессора 80387 должен быть подключен источник тактовой частоты. Синхронной с МП 80386 является только интерфейсная логика сопроцессора 80387. Внутренняя логика сопроцессора 80387 работает от источника тактовой частоты со входа 80387 CLK2.

В синхронном режиме сигнал СКМ имеет высокий уровень и вход 80387 CLK2 никуда не подключается. Сопроцессор 80387 работает от основного тактового сигнала CLK2. Операции арифметического сопроцессора полностью синхронны с работой МП 80386.

Сопроцессор 80387 использует два метода для взаимодействия с МП 80386. Первый используется, когда операции с сопроцессором инициирует МП 80386. Это происходит во время исполнения команды сопроцессора (команды ESC) и осуществляется под контролем программы. Взаимодействие по второму методу осуществляется, когда сопроцессор использует сигнал PEREQ для запроса, чтобы МП 80386 начал передачу операндов к системной памяти или от нее. Эти передачи осуществляются по требованию сопроцессора, поэтому они асинхронны с выполнением команд МП 80386. Передачи данных для сопроцессора имеют тот же самый приоритет на магистрали, что и передачи данных под управлением программы.

ОРГАНИЗАЦИЯ МИКРОПРОЦЕССОРА

В 80386 имеются две раздельные шины: шина адреса и шина данных. Шина данных - 32-разрядная и двунаправленная. В большинстве применяемых модулей для высокоcкоростной локальной шины используются 32 разряда адреса, передаваемого по адресной шине, из них 2 младших разряда дешифрируются в 4 сигнала строба данных (каждый из этих сигналов разрешает или запрещает передачу соответствующего байта данных, сигналы BE0#-BE3#), а остальные 30 разрядов представляют собой двоичный код адреса. Для управления обменом по шине адреса и шине данных используются соответствующие управляющие сигналы.

Изменяемая ширина (разрядность) шины данных позволяет процессору взаимодействовать как с 32-х, так и с 16-разрядными внешними шинами в синхронном режиме.

Выводы микропроцессора:

· Синхросигнал (CLK2)

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

· Шина данных (D0-D31)

Двунаправленные с тремя состояниями линии шины данных обеспечивают перемещение данных от 80386 к другим устройствам. Наличие высокого уровня напряжения на входах/выходах шины данных обозначает наличие кодов логической единицы "1" на этих выводах. Шина данных может передавать данные как на 32-, так и на 16-разрядные шины благодаря тому, что есть возможность изменения размера шины данных; размер шины данных определяется значением входного сигнала BS16#. При любой операции записи (включая циклы останова и выключения) 80386 всегда передает все 32 разряда данных, даже если в текущем цикле размер шины обмена равен 16 разрядам.

· Шина адреса (BE0#-BE3#, A2-A31)

Эти выходы с тремя состояниями обеспечивают физическую адресацию памяти или адресацию устройств ввода/вывода. Шина адреса обеспечивает физическое пространство адресов памяти объемом 4 гигабайта (от 00000000H до FFFFFFFFH) и пространство адресов ввода/вывода объемом 64 килобайта (от 00000000H до 0000FFFFH) для обращения к устройствам ввода/вывода.

Значения сигналов стробов данных BE0#-BE3# определяют соответственно те байты 32-разрядной шины данных, которые участвуют в текущей передаче. Это особенно удобно для взаимодействия с внешней аппаратурой.

· Сигналы определения типа цикла шины (W/R#, D/C#, M/IO#, LOCK#)

Эти выходы с тремя состояниями определяют тип текущего цикла шины. В зависимости от значения W/R# все циклы подразделяются на циклы записи и циклы чтения. D/C# разделяет все циклы на циклы обмена данными и циклы обмена управляющими сигналами. M/IO# отличает циклы обращения к памяти от циклов обращения к устройствам ввода/вывода. По сигналу LOCK# различаются циклы с блокированной шиной.

· Указатель 16-разрядной шины (BS16#)

Благодаря сигналу BS16# осуществляется непосредственная связь 80386 с 32-разрядной и 16-разрядной шинами данных. Установка активного уровня этого входа приведет к тому, что в текущем цикле шины обмен будет производиться только по младшей половине шины данных (D0-D15) в соответствии со значениями сигналов BE0# и BE1#. Дополнительное влияние сигнала BS16# (установленного в активное состояние) не проявится, если в текущем цикле сформированы активные уровни только сигналов BE0# или BE3#, действие сигнала BS16# (активного уровня) заставит процессор 80386 выполнить необходимые переключения для правильной передачи старшего (их) байта (ов) по линиям D0-D15.

В данной работе этот сигнал всегда установлен в пассивное состояние и обмен с памятью производится только 32 разрядными данными.

· Сигналы прерывания INTR, NMI

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

· Сигнал сброса (установки в исходное состояние)(RESET).

Этот входной сигнал останавливает выполнение любой операции и переводит 80386 в состояние, известное как состояние сброса. Сброс 80386 производится установкой активного уровня сигнала RESET в течение 15-ти или более периодов CLK2. Сигнал RESET может быть асинхронным по отношению с CLK2. Если необходимо, фаза внутреннего синхросигнала процессора, а также целое состояние 80386 могут быть полностью синхронизированы с внешними схемами.

Описание функционирования шины 80386 имеет отдельные параллельные шины: шину адреса и шину данных. Шина данных 32-х разрядная и двунаправленная. Ширина шины адреса 32 разряда: из них 30 старших разрядов адрес операнда и 2 разряда формируются из 4х сигналов стробов данных каждый из которых служит для выборки соответствующего байта в операнде. Тип каждого цикла шины определяется тремя сигналами: M/IO#, W/R# и D/C#. Одновременно с этими сигналами устанавливается достоверный адрес на линиях BE0#BE3# и A2-A31. Сигнал строба адреса указывает на выдачу процессором 80386 нового типа цикла шины и адреса. В рабочем состоянии шина выполняет один из ниже перечисленных циклов шины:

Таблица 1. Определение цикла шины

ТИП ПЕРЕДАЧИ

Подтверждение прерывания

Специальные циклы BE0-BE3

Считывание данных из ввода-вывода

Запись данных во ввод-вывод

Предвыборка (считывание) команд из памяти

(зарезервирован)

Считывание данных из памяти

Запись данных в память


РАЗРАБОТКА ПОДСИСТЕМЫ ПАМЯТИ МПС

При проектировании ЗУ МПС решались задачи разработки схемы накопителя информации и схемы сопряжения ОЗУ и ПЗУ с системной шиной.

Потребность в оперативной памяти определяется по ассемблерной программе:

· данные под временные переменные - 688 байт;

· объем памяти под код программы составляет 928 байт.

Особенность построения модулей памяти для микропроцессора 80386 состоит в том, что для обращения к данным используется 32-х разрядная шина данных (т.е. обмен производится по 4 байта, нужный байт выбирается по сигналам выбора байтов BE0#-BE3#). На основании этого модули памяти строятся из четырех банков с разрядностью 1 байт.

Накопитель OЗУ строится на основе микросхем КМ185РУ8 статического типа размерностью 256´8, с временем записи/считывания 45нс, Рсс = 915мВт. Накопитель ПЗУ строится на основе микросхем 556РТ17 размерностью 512´8, с временем считывания 50нс, Рсс = 998мВт.

Из временных диаграмм приведенных в приложении 4 следует, что организация тактов ожидания при обращении к памяти не требуется, т.к. циклы чтения/записи укладываются во временные ограничения - два цикла процессора T1 + T2 = 1/33МГц + 1/33МГц = 61нс.

Адресный выход МП A11 и выход M/IO# используются для выбора одного из адресуемых пространств, а сигналы BE0#, BE1#, BE2#, BE3# используются для выбора адресуемого байта в модулях ОЗУ или ПЗУ.

Объем памяти был выбран исходя из потребностей системы и адресное пространство МПС разделено и доступно для использования следующим образом:

Диапазон адресов

Адресуемое пространство

Порты ввода/вывода

ОЗУ объемом 1Кбайт

ПЗУ объемом 2Кбайта


РАЗРАБОТКА ПОДСИСТЕМЫ ВВОДА-ВЫВОДА

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

Так как в МПС информация поступает от восьми датчиков, то в процедуре ввода, прежде чем приступить к приему данных, последовательно выбирается ВУ, с которым будет производиться обмен. Нужный датчик задается в цикле, путем записи в регистр DX его номера. Используя данный номер, аппаратными средствами (дешифратор адреса и средствами управления) разрешается прием от источника с заданным номером. Интерфейс канала реализуется на основе портов ввода-вывода.

Подключение МС последовательного порта.

Интерфейсы последовательных каналов В/В реализуются на БИС программируемого интерфейса последовательной связи, например, КР580ВВ51А.

БИС КР580ВВ51А представляет собой универсальный синхронно-асинхронный приемопередатчик последовательной связи, выполняющий функции приема и преобразования параллельных форматов слов данных в последовательные форматы со служебными символами для передачи по КС (каналу связи) и последовательных форматов, принимаемых из КС слов данных в параллельный формат для ввода в процессор. БИС может быть запрограммирована для работы в 5 режимах: асинхронная передача, асинхронный прием, синхронная передача, синхронный прием с внутренней синхронизацией, синхронный прием с внешней синхронизацией. Контролируются ошибки в принимаемых словах данных на четность или нечетность, ошибки в структуре кода при асинхронном приеме, возникающие вследствие отсутствия стоповых битов, а также ошибки наложения, возникающие в результате нарушения синхронизации обмена, когда очередное слово поступает до считывания предыдущего. Скорость обмена до 64000 бод.

Управление передачей.

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

· TxRDY (Transmitter Ready): Этот выход сигнализирует системному блоку, что передатчик готов получить символ данных. TxRDY автоматически сбрасывается по переднему фронту выходного сигнала WR, когда символ данных загружается из системного блока;

· ТхС (Transmit Clock): Тактирование передачи управляет скоростью, с которой должен передаваться символ. В синхронном режиме скорость в битах в секунду равна частоте ТхС. Задний фронт сигнала ТхС сдвигает последовательные данные.

Передача данных.

При синхронной передаче выход TxD постоянно находится в маркерном уровне, пока система не пошлет свой первый символ, который является символом синхронизации КР580ВВ51А. Все биты выдвигаются по заднему фронту ТхС.

Когда передача началась, поток данных на выходе TxD должен продолжаться со скоростью ТхС. Если система не обеспечивает КР580ВВ51А символами данных до того, как буфер передачи становится пустым, то в поток данных будут автоматически вставляться символы синхронизации. В этом случае бит ТхЕ в регистре состояния переключается в высокое состояние для сигнализации того, что КР580ВВ51А пуст и передаются символы синхронизации. ТхЕ не переходит в низкое состояние, когда выдвигается символ синхронизации. Бит состояния ТхЕ сбрасывается автоматически при записи в КР580ВВ51А символа данных.

Управление приемом.

· RxRDY (Receiver Ready): Этот выход показывает, что КР 580ВВ51А содержит символ, готовый для передачи в системный блок;

· RхС (Receiver Clock) : Тактовая частота приемника управляет скоростью, с которой должен приниматься символ. Скорость следования битов равна действительной частоте RxC.

Прием данных.

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

Процедура программирования КР580ВВ51А.

КР580BB51A загружается набором управляющих слов, определяющих среду связи. Управляющие слова разбиваются на два формата: инструкция режима и инструкция команды. Инструкция режима и команды должны соответствовать определенной последовательности для надлежащей работы устройства. Инструкция режима должна быть вставлена непосредственно после операции сброса, перед использованием КР580ВВ51А для связи. Требуемые символы синхронизации для выбранного метода связи загружаются после этого в КР580ВВ51А. Все управляющие слова, записанные в КР580ВВ51А после инструкции режима, будут обозначать инструкцию команды. Сопрягается КР580ВВ51А с системными шинами процессора через выводы шины данных D7-D0, управляемые сигналами выборки БИС, чтения, записи, подаваемыми на входы CS, C/D, RD, WR. Управление входом C/D выполняется с линии А2.

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

РАЗРАБОТКА ТЭЗА

Конструктивно препроцессор при заданном размере плат может быть выполнен на одном ТЭЗе. Кроме микросхем ТЭЗ включает:

· 1 разъем типа СНП34-90;

· 1 разъем типа PS9 - для подачи напряжения питания и заземления;

· фильтрующие конденсаторы: 2 электролитических и 6 (1 штука - на 5 микросхем) керамических КМ-51-Н90-0.05, устанавливаемые на плате в непосредственной близости от микросхем;

· кварцевый резонатор и колебательный контур на 33МГц.

· Для подачи уровня "1" в данной работе вместо резисторов номиналом 1К используются "лишние" линии логического элемента 2И-НЕ, на входы которого поданы "0".

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

Тепловой режим обеспечивается средствами естественного воздушного охлаждения, и плата выполненна на металлической основе, рассеивающей тепло. В целях защиты элементов и печатной платы от влаги ТЭЗ покрывается лаком ПФЛ-86.

ЗАКЛЮЧЕНИЕ

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

· Borland C++ 3.1 и Turbo Assembler 3.1 - для оценки размера программы МПС;

· система автоматизированного проектирования Visio 4.5 и Microsoft Word 2000 -для оформления конструкторской документации.

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

· разрядность, бит - 32;

т.к. разрядность шины данных - 32 бита

· быстродействие (RG-RG), опер/с: - 6.6*106;

т.к. МП 80386 выполняет одну команду в среднем за 5 тактов, в итоге быстродействие определяется: 33МГц / 5 = 6.6*106 опер/с

· объем внутренней памяти, Кбайт: - ОЗУ - 1, ПЗУ -2;

· максимальная скорость обмена данными, Кбод: - 64;

· потребляемая мощность, Вт: - 17.25;

· напряжение питания, В (Гц): - 220 (50),

В ходе выполнения курсового проекта были решены следующие задачи проектирования МПС:

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

· определение параметров элементов МПС по результатам моделирования;

· синтез и разработка функциональных и принципиальных схем МПС;

· разработка программного обеспечения МПС;

· разработка конструкции и конструкторской документации проекта (чертежи и пояснительная записка).

Критерий качества системы равен:

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

· Микропроцессор 80386: Справочник /К. Паппас, У. Марри / М.: Радио и связь, 1993.-320 с.

· Процессор 80386DX в схеме персонального компьютера / Поляков А.В. -М.:ИКС, 1994.

· Микропроцессоры и микропроцессорные комплекты интегральных микросхем: Справочник. В 2 т./ Под ред. В. А. Шахнова.- М.: Радио и связь, 1988.- 368 с.: ил.

· Логические ИС КР1533, КР1554: справочник. В 2 т. /Под ред. И. И. Петровского, БИНОМ, 1993, с ил.

· Применение микросхем памяти в электронных устройствах, О. Н. Лебедев, М.: Радио и связь, 1994. - 216 с.: ил.

· ГОСТ 2.743-91 ЕСКД. Обозначения условные графические в схемах. Элементы цифровой техники.

· ГОСТ 2.708-81 ЕСКД. Правила выполнения электрических схем цифровой электрической техники.

· ГОСТ 2.755-87 ЕСКД. Обозначения условные графические в схемах. Устройства коммутационные и соединения контактные.

· Токарев В. Л. Микропроцессорные системы: методические указания по выполнению лабораторных работ и курсового проекта для студентов специальности 220100 дневного и вечернего обучения. - Тула: ТГУ, 1997. - 48 с.

· Матикашвили Т.И. Оформление документов по программированию и цифровой электронике Тула: ТГТУ, 1994. -44с.

ПРИЛОЖЕНИЕ 1

Листинг программы моделирования объекта наблюдения и МПС

#include

#include

#include

{();();= 0.0;= 0.0;(O, 0, sizeof(float)*(R+L));(fi, 0, sizeof(char)*(R+L));(r, 0, sizeof(float)*(R+L)*(R+L));(i=0; i

{(i=R-1; i>0; i--) fi[i] = fi;(i=R+L-1; i>R-1; i--) fi[i] = fi; = z; fi[R] = x;= ((float)rand()/RAND_MAX)*sigma;= ((float)rand()/RAND_MAX)*2-1;= 0.0;(i=0; i

{(j=i+1; j

{= r[i][j]; r[i][j] = r[j][i]; r[j][i] = tmpr;

}(chisl, 0, sizeof(float)*(R+L)*(R+L));(i=0; i

{(j=0; j

{(l=0; l

{[i][j]+=chline[l]*r[l][j];

}(i=0; i

{(j=0; j

{[i][j]-=chisl[i][j]/znam;

}[i] = rfi[i]/znam;

}= 0.0;(i=0; i

ПРИЛОЖЕНИЕ 2

Результаты моделирования объекта наблюдения и МПС

Step 1: fi = [ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 ]= 0.405= [ 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 ]2: fi = [ 0.405 0.022 0.000 0.000 0.000 0.000 0.000 0.000 ]= 0.578= [ 0.930 0.413 0.000 0.000 0.000 0.000 0.000 0.000 ]3: fi = [ 0.627 0.653 0.022 0.000 0.000 0.000 0.000 0.000 ]= -0.322= [ 0.322 0.021 -0.001 0.000 0.000 0.000 0.000 0.000 ]4: fi = [ 0.696 -0.774 0.653 0.022 0.000 0.000 0.000 0.000 ]= -0.092= [ 0.303 0.005 -0.001 -0.001 0.000 0.000 0.000 0.000 ]5: fi = [ 0.048 0.973 -0.774 0.653 0.022 0.000 0.000 0.000 ]= 0.386= [ 0.821 0.377 -0.409 0.030 0.704 0.000 0.000 0.000 ]6: fi = [ 0.853 -0.425 0.973 -0.774 0.653 0.022 0.000 0.000 ]= 0.091= [ 0.875 0.411 -0.429 0.033 0.765 -0.305 0.000 0.000 ]7: fi = [ 0.835 0.225 -0.425 0.973 -0.774 0.653 0.022 0.000 ]= -0.242= [ 0.467 0.233 -0.247 -0.026 0.375 -0.109 0.007 0.000 ]8: fi = [ 0.225 0.266 0.225 -0.425 0.973 -0.774 0.653 0.022 ]= -0.028= [ 0.485 0.220 -0.242 -0.018 0.348 -0.126 0.054 -0.202 ]9: fi = [ 1.007 -0.375 0.266 0.225 -0.425 0.973 -0.774 0.653 ]= -0.008= [ 0.491 0.212 -0.238 -0.020 0.336 -0.103 0.020 -0.259 ]10: fi = [ -0.216 -0.940 -0.375 0.266 0.225 -0.425 0.973 -0.774 ]= 0.372= [ 0.821 0.451 -0.467 -0.260 0.789 -0.323 0.299 -0.482 ]11: fi = [ 0.701 0.817 -0.940 -0.375 0.266 0.225 -0.425 0.973 ]= 0.084= [ 0.836 0.462 -0.436 -0.218 0.702 -0.320 0.297 -0.439 ]12: fi = [ 1.047 -0.970 0.817 -0.940 -0.375 0.266 0.225 -0.425 ]= -0.256= [ 0.504 0.263 -0.249 -0.070 0.431 -0.131 0.026 -0.285 ]13: fi = [ 0.533 -0.762 -0.970 0.817 -0.940 -0.375 0.266 0.225 ]= -0.020= [ 0.522 0.260 -0.247 -0.071 0.436 -0.138 0.026 -0.289 ]14: fi = [ 0.117 -0.969 -0.762 -0.970 0.817 -0.940 -0.375 0.266 ]= 0.023= [ 0.343 0.263 -0.251 -0.073 0.239 -0.135 0.019 -0.291 ]15: fi = [ 0.939 0.325 -0.969 -0.762 -0.970 0.817 -0.940 -0.375 ]= -0.204= [ 0.330 0.176 -0.220 -0.037 0.259 -0.124 0.048 -0.136 ]16: fi = [ 0.648 -0.632 0.325 -0.969 -0.762 -0.970 0.817 -0.940 ]= 0.048= [ 0.343 0.272 -0.217 -0.043 0.247 -0.112 0.052 -0.237 ]17: fi = [ 0.753 0.478 -0.632 0.325 -0.969 -0.762 -0.970 0.817 ]= 0.552= [ 0.765 0.439 -0.471 -0.201 0.673 -0.355 0.232 -0.404 ]18: fi = [ 0.559 -0.946 0.478 -0.632 0.325 -0.969 -0.762 -0.970 ]= 0.023= [ 0.776 0.442 -0.450 -0.203 0.675 -0.358 0.225 -0.410 ]19: fi = [ 0.974 -0.256 -0.946 0.478 -0.632 0.325 -0.969 -0.762 ]= -0.030= [ 0.767 0.419 -0.408 -0.212 0.673 -0.359 0.229 -0.404 ]20: fi = [ 0.954 0.139 -0.256 -0.946 0.478 -0.632 0.325 -0.969 ]= -0.368= [ 0.517 0.275 -0.246 -0.015 0.438 -0.150 0.006 -0.256 ]21: fi = [ 1.736 0.134 0.139 -0.256 -0.946 0.478 -0.632 -0.325 ]= -0.045= [ 0.502 0.267 -0.248 -0.065 0.441 -0.150 0.056 -0.258 ]22: fi = [ 0.679 -0.488 0.134 0.139 -0.256 -0.946 0.478 -0.632 ]= 0.222= [ 0.664 0.329 -0.357 -0.126 0.545 -0.222 0.103 -0.349 ]23: fi = [ 0.685 0.531 -0.488 0.134 0.139 -0.256 -0.946 0.478 ]= 0.176= [ 0.675 0.341 -0.357 -0.115 0.558 -0.236 0.122 -0.346 ]24: fi = [ 1.015 -0.361 0.531 -0.488 0.134 0.139 -0.256 -0.946 ]= -0.220= [ 0.587 0.294 -0.397 -0.122 0.442 -0.245 0.111 -0.217 ]25: fi = [ 0.755 0.111 -0.361 0.531 -0.488 0.134 0.139 -0.256 ]= -0.173= [ 0.546 0.277 -0.362 -0.136 0.499 -0.218 0.071 -0.251 ]26: fi = [ 0.420 0.660 0.111 -0.361 0.531 -0.488 0.134 -0.139 ]= 0.310= [ 0.596 0.297 -0.314 -0.118 0.516 -0.186 0.091 -0.296 ]27: fi = [ 1.239 -0.775 0.660 0.111 -0.361 0.531 -0.488 -0.134 ]= 0.119= [ 0.615 0.321 -0.276 -0.078 0.532 -0.152 0.114 -0.301 ]28: fi = [ 0.242 -0.715 -0.775 0.660 0.111 -0.361 0.531 -0.488 ]= -0.093= [ 0.610 0.315 -0.297 -0.096 0.526 -0.163 0.102 -0.302 ]29: fi = [ 0.610 -0.327 -0.715 -0.775 0.660 0.111 -0.361 0.531 ]

ПРИЛОЖЕНИЕ 3

Листинг программы прошивки ПЗУ

TEXT segment byte public "CODE"cs:_TEXT, ds:_TEXT 100h

; Процедура инициализации

; Обнуление O

;di,offset Oax,dses,axax,axcx,16stoswstart:word ptr x,0word ptr x+2,0word ptr z,0word ptr z+2,0

; r -> единичная матрица

mov word ptr i,0

@1@58:bx,word ptr icl,5bx,clax,word ptr icl,2ax,clbx,axword ptr r,16256word ptr r,0word ptr iword ptr i,8 short @1@58

; Настройка портов ввода-вывода

@1@581:dx,4al,11110101B ; ассинхр.,

; 6 бит символа, четный паритет

mov al,00111110B ; приемикdx,al@1@581dx,4al,11111101B ; ассинхр.,

; 8 бит символа, четный паритет

mov al,00110011B ; передатчикdx,al

; Обработка данных

mov cx,8dx,0bx,0

@1@1599:dx,4al,dxbyte ptr fi,albx@1@1599

; Обнуляем rfi

;di,offset rfiax,axcx,16stosw

; Вычисление rfi

@1@198:word ptr j,0

@1@226:bx,word ptr jal,byte ptr fiah,0word ptr temp,axword ptr tempbx,word ptr icl,5bx,clax,word ptr jcl,2ax,clbx,axdword ptr rbx,word ptr ibx,cldword ptr rfibx,word ptr ibx,cldword ptr rfiword ptr jword ptr j,8short @1@226word ptr iword ptr i,8short @1@198

;word ptr znam+2,0word ptr znam,0

; Вычисление znam

;word ptr i,0si,sicl,2si,clsi,offset rfi

@1@450:bx,word ptr ial,byte ptr fiah,0word ptr temp,axword ptr tempdword ptr dword ptr znamdword ptr znamsi,4word ptr isi,offset rfi+32short @1@450

;ax,word ptr sigmaword ptr temp,axword ptr tempdword ptr znamdword ptr znam

; Транспонирование r

@1@590:ax,word ptr iaxword ptr j,ax@1@674

@1@618:bx,word ptr icl,5bx,clax,word ptr jcl,2ax,clbx,axax,word ptr rword ptr temp,axax,word ptr rword ptr temp+2,axdx,bxbx,word ptr jcl,5bx,clax,word ptr icl,2ax,clbx,axax,word ptr rword ptr temp+4,axax,word ptr rword ptr temp+6,axax,word ptr tempword ptr r,axax,word ptr temp+2word ptr r,axbx,dxax,word ptr temp+4word ptr r,axax,word ptr temp+6word ptr r,axword ptr j

@1@674:word ptr j,8@@28@1@618

@@28:word ptr iword ptr i,8@@29@1@590

; Обнуление chisl

;di,offset chislax,axcx,128stosw

; Вычисление chline

@1@814:bx,word ptr jal,byte ptr fiah,0word ptr temp,axword ptr tempbx,word ptr icl,2bx,cldword ptr rfibx,word ptr jbx,cldword ptr chlineword ptr jword ptr j,8short @1@814

; Вычисление chisl

@1@926:word ptr l,0ax,word ptr icl,5ax,cldx,word ptr jcl,2dx,clax,dxsi,ax

@1@982:bx,word ptr lcl,5bx,clax,word ptr jcl,2ax,clbx,axdword ptr rbx,word ptr lbx,cldword ptr chlinedword ptr chisldword ptr chislword ptr lword ptr l,8short @1@982word ptr jword ptr j,8short @1@926word ptr iword ptr i,8@@30@1@786

; Вычисление r

@1@1206:word ptr j,0

@1@1234:bx,word ptr icl,5bx,clax,word ptr jcl,2ax,clbx,axdword ptr chisldword ptr znamdword ptr rdword ptr rword ptr jword ptr j,8short @1@1234

; Вычисление k

;bx,word ptr icl,2bx,cldword ptr rfidword ptr znamdword ptr kword ptr iword ptr i,8@@31@1@1206

;word ptr e,0word ptr e+2,0

; Вычисление e

;word ptr i,0si,sicl,2si,clsi,offset O

@1@1486:bx,word ptr ial,byte ptr fiah,0word ptr temp,axword ptr tempdword ptr dword ptr edword ptr esi,4word ptr isi,offset O+32short @1@1486

;al,byte ptr fiah,0word ptr temp,axword ptr tempdword ptr edword ptr e

; Вычисление O

@1@1850:bx,word ptr icl,2bx,cldword ptr kdword ptr edword ptr Odword ptr Oword ptr iword ptr i,8short @1@1850

;ax,100word ptr temp,axax,0word ptr temp+2,axcx,8bx,0

@1@1860:dword ptr Odword ptr tempword ptr temp+4al,byte ptr temp+420h,albx,4@1@1860calc

;db 2 dup (?)db 2 dup (?)db 2 dup (?)dd 0.5db 4 dup (?)db 4 dup {?}db 4 dup (?)db 256 dup (?)db 32 dup (?)db 32 dup (?)db 8 dup (?)db 8 dup (?)db 4 dup (?)db 32 dup (?)db 4 dup (?)db 256 dup (?)db 32 dup (?)

TEXT endsinit

ПРИЛОЖЕНИЕ 4

Временные диаграммы работы системы

Рисунок 1. Цикл чтения из ОЗУ

Рисунок 2. Цикл записи в ОЗУ

Рисунок 3. Цикл чтения из ПЗУ

Значение

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

Структура

Структурная схема системы представлена на рисунке 3.2.

Рисунок 3.2 - Структурная схема МПС

МП является центральным блоком МПС. Он управляет всеми микросхемами и производит обработку данных.

МП формирует адрес на США и осуществляет обмен с СШД.

ОЗУ предназначено для хранения промежуточных данных.

ПЗУ предназначена для хранения кода программы и различных констант.

ППИ предназначен для подключения внешних устройств. К ППИ подключены АЦП, дискретные сигналы и ПП.

АЦП предназначен для преобразования аналогового сигнала с датчиков в цифровой код.

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

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

К МПС должна обеспечивать:

  • - опрос 7 аналоговых датчиков;
  • - сбор 8 дискретных сигналов;
  • - формирование 4 дискретных управляющих воздействий.

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

где и - количество аналоговых и дискретных входных сигналов соответственно; и - разрядность аналогового и дискретного сигналов.

В нашем случае и.

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

В качестве центрального блока системы выбран микроконтроллер КМ1816ВЕ51. Его основными преимуществами являются:

  • - наличие резидентной памяти программ и данных;
  • - наличие встроенного ПП;
  • - 4 порта;
  • - низкое энергопотребление;
  • - встроенные таймеры-счетчики.

Для хранения данных используется встроенные 128 байт памяти программ МК. Программа будет храниться в резидентной памяти программ.

Для опроса аналоговых датчиков используется микросхема К572ПВ4. К преимуществам микросхемы относятся:

  • - наличие встроенного мультиплексора;
  • - автоматический опрос датчиков без участи микропроцессора;
  • - хранение результатов преобразования по каждому каналу во встроенной статической памяти.

Так как у МК нет выходов генератора, для формирования тактового сигнала используется микросхема генератора К531ГГ1.


Для организации обмена информации с диспетчерским пунктом используется встроенный в МК приемопередатчик. Однако ПП КМ1816ВЕ51 передает данные с помощью пятивольтовых логических сигналов: единица представляется уровнем напряжения от 2,4 В до 5 В, а нуль - от 0 до 0, 8 В. При передаче по каналу RS-232 нуль и единица кодируются одинаковыми по величине (от 5 до 12 В), но разными по знаку сигналами.

Поскольку для передачи по RS-232 пятивольтовые логические сигналы должны быть преобразованы в сигналы другого уровня, в МПС используется микросхема MAX202E от Maxim. Она содержат преобразователь напряжения из +5 В в ±10 В и каскады, осуществляющие преобразование логических сигналов стандартного пятивольтного уровня по стандарту RS-232. Она содержит преобразователи логического уровня для двух приемников и двух передатчиков, из которых используется только один приемопередающий канал.

Принципиальная схема МПС приведена в приложении В.

К выводам XTAL1 и XTAL2 микроконтроллера DD1 подключается кварцевый резонатор ZQ1 на 12 МГц. Для более стабильного запуска выводы кварцевого резонатора соединены с общим проводом через конденсаторы С1 и С2 емкостью 21 пФ.

При подаче напряжения питания на микроконтроллер обязателен сброс микроконтроллера. С этой целью вход RST соединен с шиной питания через конденсатор С3 емкостью 6 мкФ и с общим проводом - через резистор R1 сопротивлением 100 кОм. В момент включения питания конденсатор разряжен, и вход сброса оказывается под потенциалом, близким к напряжению питания. Несмотря на снижение этого потенциала вследствие заряда С3, в течение десятка миллисекунд уровень сигнала на входе сброса остается единичным, и осуществляется корректный запуск микроконтроллера.

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

К линиям порта P0 МК DD1 подключены дискретные входные сигналы DDAT1-DDAT8. К линиям порта P1 подключена АЦС DA1. На линиях P1.0-P1.3 формируются дискретные управляющие воздействия DOUT1-DOUT4.

Так как аналоговые датчики, подключаемые к АЦС DA1 должны иметь выходным параметром напряжение, находящееся в диапазоне от 0В до 2,5В. Для преобразования токовых сигналов датчиков в сигнал напряжения используются резисторы R2-R13 .

Спецификация элементов представлена в приложении Г.

Разработка алгоритма работы МПС

МПС работает в следующей последовательности:

  • а) инициализация системы;
  • б) опрос датчиков;
  • в) управление насосным агрегатом;
  • г) обмен данными с диспетчерским пунктом;
  • д) переход к шагу б.

Блок-схемы алгоритмов программы работы МПС представлены в приложении Д, фрагмент кода программы - в приложении Е.

Расчет потребляемой мощности

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

Расчет мощности сведен в таблицу 3.4.

Таблица 3.1 - Расчет потребляемой мощности

Система потребляет мощность.

Устройство передачи данных

Для обеспечения обмена с диспетчерским пунктом используется преобразователь интерфейса MI 486. Он позволяет осуществлять прием/передачу данных через сеть Ethernet с компьютера со скоростью до 112 кбод.

Преобразователь интерфейса показан на рисунке 3.3.

Рисунок 3.3 - Преобразователь интерфейса MI 486

Технические характеристики:

  • - выходной интерфейс: RS-232;
  • - макс. скорость - до 112 кбод;
  • - входной интерфейс Ethernet 10BaseT/100BaseT;
  • - разъем RJ45.

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

Введение

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

В качестве базовой микросхемы для всех приведенных в книге примеров использована микросхема 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); // бесконечный цикл