Разработка управляющей программы для микроконтроллера HCS12

 

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

федеральное государственное автономное образовательное учреждение

высшего профессионального образования

"Северный Арктический федеральный университет"

Институт математики, информационных и космических технологий







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

ТЕМА: __Разработка управляющей программы для микроконтроллера HCS12




студенту МИКТ института 2 курса 373232 группы

Мелехову Дмитрию Валерьевичу


ИСХОДНЫЕ ДАННЫЕ


Микроконтроллер должен формировать:

. Сигналы управления подъема и опускания.

Сигналы раскрытие дверей лифта.

Сигналы раскрытия дверей шахты лифта.

Сигналы воздействия.

Кнопка нажатия вызова лифта на этаже.

Кнопка указания этажа в кабине лифта.

Вызов диспетчера.

Сигнал давления на пол кабины лифта.

Условие эксплуатации лифта.

Лифт остается на этаже, на котором вышли пассажиры.

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

При подъезде к требуемому этажу использовать плавное торможение скорости.

Для точного совмещения положения пола кабины лифта и пола этажа использовать конечный выключатель.

При подъеме вверх игнорировать нажатия кнопки и останавливаться только на этаже кабины лифта.

При опускании вниз «собирать» всех.

Учитывать перегрузку кабины лифта.

При движении пустой кабины и в ожидании вызова выключать свет внутри кабины лифта.

Контроль нажатия клавиатуры внутри кабины.

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

Выполнить подсвечивания нажатой цифры этажа.

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

Для движения лифта на специальные этажи ввести определенный код.

Руководитель зав. кафедрой ______________ И.И. Василишин___

(должность) (подпись) (и., о., фамилия)


ОГЛАВЛЕНИЕ


ВВЕДЕНИЕ

. ВНЕШНЕЕ ОПИСАНИЕ

. РАЗРАБОТКА БЛОК-СХЕМЫ

.УПРАВЛЯЮЩАЯ ПРОГРАММА

ЗАКЛЮЧЕНИЕ

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ


ВВЕДЕНИЕ


Около 55% проданных в мире процессоров приходится на 8ми битные микроконтроллеры. Более 4 млрд. 8ми битных микроконтроллеров продано в 2006. Они установлены в микроволновках, стиральных машинах, музыкальных центра. При этом они являются однокристальными компьютерами, со своим процессором, памятью, портами ввода-вывода.

Микроконтроллер - это однокристальная ЭВМ. В 1971 придумали разместить всю обвязку процессора (ОЗУ, контроллеры портов, ПЗУ и т.д.) на одном чипе. В 1980 intel уже выпускает первый микроконтроллер. На сегодняшний момент на чипе микроконтроллера содержится процессор, flash память для программ, объемом 1К - 256K; 32 B - 8KB SRAM (ОЗУ); 64 B - 4KB EEPROM. Тактовая частота 1 - 16 Мгц. Конечно же, цифры только примерные, всё зависит от производителя и модели. Таким образом, микроконтроллер имеет гарвардскую архитектуру, т.е. раздельные памяти данных и программ.

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

Исторически основной язык - ассемблер. В частности КР1878ВЕ1 программируется только на ассемблере. Для других микроконтроллеров существую компиляторы для языка Си. Для atmelовских микроконтроллеров существует опенсорсный компилятор WinAVR (порт gcc). Также есть компилятор для бейсика Bascom AVR, и даже для языка Forth. Изначально архитектура микроконтроллеров AVR была оптимизирована для того, что бы программы, написанные на Си, выполнялись быстрее.

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

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


ВНЕШНЕЕ ОПИСАНИЕ


Семейство однокристальных микроконтроллеров HCS12

Компания Freescale Semiconductor (бывший сектор полупроводниковых компонентов компании Motorola) на протяжении многих лет является лидером в производстве полупроводниковых компонентов для встраиваемых приложений. Микроконтроллеры и интегрированные процессоры одна из основных групп её продукции. Freescale Semiconductor обладает одним из наиболее полных портфелей микроконтроллеров (МК) и микропроцессоров среди мировых производителей, непрерывно совершенствуя свой модельный ряд.

В настоящее время Freescale Semiconductor предоставляет разработчикам множество моделей микроконтроллеров и интегрированных процессоров в каждой из классификационных категорий микропроцессорной элементной базы:

Восьмиразрядные МК представлены семейством HCS08;

Шестнадцатиразрядные семействами HCS12(X) и DSP56800/E;

-разрядные семействами ColdFire, PowerPC и iMx.

Шестнадцатиразрядные МК компании Freescale Semiconductor представлены в настоящее время двумя семействами: HCS12(X) и DSP микроконтроллерами 56800 (DSP Digital Signal Processor процессор Цифровой Обработки Сигналов (ЦОС)).

Все модели МК семейства HCS12(X) обладают характерными отличительными признаками:

имеют экономичное 16-разрядное CISC процессорное ядро, которое позволяет производить операции над 8- и 16-разрядными операндами;

имеют встроенный модуль flash-памяти программ. МК семейства HCS12 и HCS12X обладают модулем flash-памяти третьего поколения (по классификации компании Freescale Semiconductor;

большинство моделей семейства HCS12(X) содержат на кристалле специальный модуль flash ПЗУ с функцией эмуляции EEPROM;

все МК семейства HCS12(X) позволяют реализовать режимы программирования и отладки в системе, благодаря наличию на кристалле модуля внутрисхемной отладки BDM.


Рисунок 1 - Обобщенная структура МК семейства HCS12Cxxx


Обобщенная структура МК семейства HCS12X представлена на рисунке 1. Все МК этого семейства обладают двухпроцессорным ядром. Основной процессор CPUS12X выполнен с использованием архитектуры CISC, длина обрабатываемого слова 16-бит. Второй процессор XGATE дополнительный, имеет RISC-архитектуру, частота шины до 100 МГц, оперирует также с 16-разрядными словами. Основной процессор в составе ядра CPU12X претерпел существенные изменения по отношению к предыдущей версии CPUS12. Добавлены новые команды, существенно улучшены режимы энергопотребления.

Способы адресации

Для выборки операндов из памяти МК семейства HCS12 используют следующие способы адресации:

внутренняя или неявная (INH - Inherent);

непосредственная (IMM - Immediate);

прямая (DIR - Direct):

прямая расширенная (EXT - Extended);

относительная (REL - Relative):

индексная (IDX - Indexed).

Внутренняя или неявная адресация INH

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

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

Непосредственная адресация IMM

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

Прямая адресация DIR

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

Прямая расширенная адресация ЕХТ

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

Относительная адресация REL

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

Индексная адресация IDX

В командах с индексной адресацией адрес операнда определяется по содержимому двухбайтового индексного регистра X или Y, указателя стека SP или программного счётчика PC.

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

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

Команды загрузки и пересылки данных

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

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

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

Логические команды и операции сдвига

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

Команды битовых операций

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

Команды ветвления

Инструкции ветвления вызывают изменение исполняемой последовательности команд, если выполняются определённые условия. Т.е. с помощью них можно осуществлять переходы между фрагментами программы, тем самым, пропуская или выполняя дополнительные операции. Ядро CPU 12 использует три вида ветвлений: короткие, длинные, по битовым условиям.

Команды вызова подпрограмм

Инструкции перехода на подпрограмму предназначены для передачи управления фрагменту кода, который выполняет определённую задачу. Для вызова подпрограммы может быть использован короткий переход (BSR), переход на подпрограмму (JSR) или расширенный переход (CALL).

Команды перехода в режимы пониженного энергопотребления

Существует две команды перевода микроконтроллера в режим пониженного энергопотребления. Инструкция STOP помещает в стек адрес возврата и содержимое регистров ЦП, а затем выключает систему тактирования. Команда WAI также отправляет в стек адрес возврата и содержимое регистров ЦП. После этого микроконтроллер начинает ожидать поступления запроса на прерывание. При этом система тактирования остаётся включённой.

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


РАЗРАБОТКА БЛОК-СХЕМЫ


Запуск лифта начинается с «холодного старта», закрытия двери и вывода лифта на нижний этаж и установка начальных настроек. Основная блок-схема алгоритма работы лифта представлена на рисунке 2. Далее запускается первый таймер с интервалом в 0,2 секунды (блок схема подпрограммы «Таймер 1» представлена на рисунке 3), в момент срабатывания которого на порту «А» на первом разряде формируется уровень напряжения соответствующий логической единице и запускается второй таймер с интервалом в 10 микросекунд (блок схема подпрограммы «Таймер 2» представлена на рисунке 4). В случае если лифт где либо вызван (произошло нажатие кнопки), сначала происходит проверка, находится ли лифт на нужном этаже, если да то открываются двери, если нет, то происходит проверка, находится ли лифт выше нужного этажа. Если лифт находится выше, то запускается подпрограмма «Движение вверх» (блок схема подпрограммы «Движение вверх» представлена на рисунке 5) и происходит изменение управляющего слова. Если лифт находится ниже, то запускается подпрограмма «Движение вниз» (блок схема подпрограммы «Движение вниз» представлена на рисунке 6) и также меняется управляющее слово.

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

Движение вверх происходит по аналогичной схеме.

При запуске подпрограммы «Открытие дверей» (блок схема подпрограммы «Открытие дверей» представлена на рисунке 7) происходит проверка возможности открытия дверей.

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

Если дверь не открывается: проверяем, открыта ли дверь. Если не открыта, то ждем и снова проверяем, открывается ли дверь. Если открыта, то проверяем, истекло ли время ожидания. Если нет, то ждем и проверяем еще раз. Если да, то закрываем дверь и проверяем, поступил ли сигнал. Если не поступил, то ждем и снова проверяем. Если поступил, то анализируем куда ехать и переходим на метку К.


Рисунок 2 - Основная блок-схема алгоритма


Рисунок 3 - Блок-схема алгоритма подпрограммы «Таймер 1»


Рисунок 4 - Блок-схема алгоритма подпрограммы «Таймер 2»


Рисунок 5 - Блок-схема алгоритма подпрограммы «Движение вверх»


Рисунок 6 - Блок-схема алгоритма подпрограммы «Движение вниз»


Рисунок 7 - Блок-схема алгоритма подпрограммы «Открытие дверей»


УПРАВЛЯЮЩАЯ ПРОГРАММА

EQU $0000EQU $E000EQU $FFFE

INITRG EQU $0011

;Num1 EQU $60 ;Адрес младшего байта первого числа; ;

;MOVB #$08, $60; ;MOVB #$09, $61; ;LDAA Num1+1;EQU $0020 ;Показывает на каком этаже находиться лифт;EQU $0021 ;0 - закрыто 1 - открыть дверь 2 - дверь открыта 3 - закрыть дверь;EQU $0021 ;ячейка хранящая условие перехода но более высокую скорость;EQU $0023 ;0 - низкая скорость 1 - средняя скорость;EQU $0024 ;0 - двигатель выключен 1 - двигатель включён;EQU $0025 ;0 - таймер выключен 5 - таймер равен 5 секундам;

VizovLiftaVneKabini EQU $0026EQU $0027EQU $0028

ORG RomStart

;Холодный старт. Сброс настроек. Закрыть двери. Вывести лифт на нулевой(первый этаж) уровень; : MOVB #$08, INITRG#$01, EtajGdeLift ;этаж где лифт, по умолчанию 1 этаж;#$00, TimerOtritihDverei ;по умолчанию таймер выключен, значит в переменной занесён 0;#$00, OtkritiZakritiDvery ;по умолчанию закрыты, значит в переменной занесён 0;#$00, DvigatelLifta ;по умолчанию выключен, значит в переменной занесён 0;#$00, VizovLiftaVneKabini ;по умолчанию лифт не был вызван, значит переменная равна 0;#$00, VizovLiftaVKabine ;по умолчанию лифт не был вызван, значит переменная равна 0;#$02, SkorostLifta ;Скорость лифта увеличивается если расстояние больше двух этажей;

;Основной цикл лифта;:#$05, EtajKudaNadoLifty#$01 ;Если равно 1 то нажали на кнопку вне кабиты;VizovLiftaVneKabini ;Сравниваем ячейку А с переменной вызов лифта вне кабины;VizovLifta ;Если неравны но переходим на метку VizovLifta, иначе продолжаем работу программы;#$01 ;Если равно 1 то нажали на кнопку в кабине;VizovLiftaVKabine ;Сравниваем ячейку А с переменной вызов лифта вне кабины;CikeLifta

;Вызов лифта;:EtajKudaNadoLifty ;Здесь указываем этаж на котором мы нажали кнопку вызова;EtajKudaNadoLiftyEtajGdeLift ;Вычитаем из B значение где находиться лифт, а потом заномим в Б это значение;SkorostLifta ;Сравниваем ячейку B с переменной Скорость лифта;Skorost ;Если ячейка Б больше то переходим на метку Skorost, иначе продолжаем работу программы;

JMP go2:#$01, SkorostDvijenia:

CMPA EtajGdeLift ;Сравниваем ячейку А с переменной ЭтажГдеЛифт;go ;Если неравны но переходим на метку go, иначе продолжаем работу программы;quit: EtajGdeLift ;Сравниваем ячейку А с переменной ЭтажГдеЛифт;Vverh ;Если мы находимся выше лифта то переходим на метку Vverh, иначе продолжаем работу;#$01DvigatelLifta ;Включаем двигатель, значит в переменную заносим 1;EtajGdeLift ;Опускаем лифт на один этаж;VizovLifta:#$01DvigatelLifta ;Включаем двигатель, значит в переменную заносим 1;EtajGdeLift ;Поднимаем лифт на один этаж; VizovLifta :

;Мы на нужном этаже;#$00DvigatelLifta ;Выключаем двигатель, значит в переменную заносим 0; #$01OtkritiZakritiDvery ;Хотим открыть двери лифта, значит в переменную заносим 1; #$02OtkritiZakritiDvery ;Открываем двери, значит в переменную заносим 2; #$05TimerOtritihDverei ;в таймер ввели 5 секунд; : #$00 ;Здесь указываем когда закрыть двери; TimerOtritihDverei ;Сравниваем ячейку А с переменной Таймера;goTimer ;Если неравны но переходим на метку goTimer, иначе продолжаем работу программы;

JMP TimerItsOk ;Время вышло; : DEC TimerOtritihDvereiCicleTimera : #$03

STAA OtkritiZakritiDvery ;Хотим закрыть двери, значит в переменную заносим 3;

LDAA #$00OtkritiZakritiDvery ;Закрываем двери, значит в переменную заносим 0;

JMP CikeLifta StartVector.W Lift


ЗАКЛЮЧЕНИЕ


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

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


СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

управляющая программа микроконтроллер команда

Бабич Н.П. Компьютерная схемотехника. Методы построения и проектирования работы/ Н.П. Бабич, И.А. Жуков. - Киев: «МК-Пресс», 2004. - 576 с.

Карпов Ю.Г. Теория автоматов. - СПб.: Питер, 2002. - 224 с.

Синтез микроконтроллера: методические указания по выполнению курсовой работы /сост. И.И. Василишин. - Архангельск: Изд-во АГТУ, 2006. - 46 с.


МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ федеральное государственное автономное образовательное учреждение высшего профессионального образова

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ