Помощь в написании студенческих работ
Антистрессовый сервис

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

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

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

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

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

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

Институт математики, информационных и космических технологий по дисциплине _Современная элементная база вычислительных систем ТЕМА: __Разработка управляющей программы для микроконтроллера HCS12

студенту МИКТ института 2 курса 373 232 группы Мелехову Дмитрию Валерьевичу

ИСХОДНЫЕ ДАННЫЕ Микроконтроллер должен формировать:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ОГЛАВЛЕНИЕ ВВЕДЕНИЕ

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

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

3.УПРАВЛЯЮЩАЯ ПРОГРАММА ЗАКЛЮЧЕНИЕ СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

ВВЕДЕНИЕ

Около 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;

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

Шестнадцатиразрядные МК компании Freescale Semiconductor представлены в настоящее время двумя семействами: HCS12(X) и DSP микроконтроллерами 56 800 (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 — Блок-схема алгоритма подпрограммы «Открытие дверей»

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

RamStart EQU $ 0000

RomStart EQU $E000

StartVector EQU $FFFE

INITRG EQU $ 0011

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

;MOVB #$ 08, $ 60; ;MOVB #$ 09, $ 61; ;LDAA Num1+1;

EtajGdeLift EQU $ 0020 ;Показывает на каком этаже находиться лифт;

OtkritiZakritiDvery EQU $ 0021 ;0 — закрыто 1 — открыть дверь 2 — дверь открыта 3 — закрыть дверь;

SkorostLifta EQU $ 0021 ;ячейка хранящая условие перехода, но более высокую скорость;

SkorostDvijenia EQU $ 0023 ;0 — низкая скорость 1 — средняя скорость;

DvigatelLifta EQU $ 0024 ;0 — двигатель выключен 1 — двигатель включён;

TimerOtritihDverei EQU $ 0025 ;0 — таймер выключен 5 — таймер равен 5 секундам;

VizovLiftaVneKabini EQU $ 0026

VizovLiftaVKabine EQU $ 0027

EtajKudaNadoLifty EQU $ 0028

ORG RomStart

;Холодный старт. Сброс настроек. Закрыть двери. Вывести лифт на нулевой (первый этаж) уровень;

Lift: MOVB #$ 08, INITRG

MOVB #$ 01, EtajGdeLift ;этаж где лифт, по умолчанию 1 этаж;

MOVB #$ 00, TimerOtritihDverei ;по умолчанию таймер выключен, значит в переменной занесён 0;

MOVB #$ 00, OtkritiZakritiDvery ;по умолчанию закрыты, значит в переменной занесён 0;

MOVB #$ 00, DvigatelLifta ;по умолчанию выключен, значит в переменной занесён 0;

MOVB #$ 00, VizovLiftaVneKabini ;по умолчанию лифт не был вызван, значит переменная равна 0;

MOVB #$ 00, VizovLiftaVKabine ;по умолчанию лифт не был вызван, значит переменная равна 0;

MOVB #$ 02, SkorostLifta ;Скорость лифта увеличивается если расстояние больше двух этажей;

;Основной цикл лифта;

CikeLifta:

MOVB #$ 05, EtajKudaNadoLifty

LDAA #$ 01 ;Если равно 1 то нажали на кнопку вне кабиты;

CMPA VizovLiftaVneKabini ;Сравниваем ячейку, А с переменной вызов лифта вне кабины;

BNE VizovLifta ;Если неравны, но переходим на метку VizovLifta, иначе продолжаем работу программы;

LDAA #$ 01 ;Если равно 1 то нажали на кнопку в кабине;

CMPA VizovLiftaVKabine ;Сравниваем ячейку, А с переменной вызов лифта вне кабины;

JMP CikeLifta

;Вызов лифта;

VizovLifta:

LDAA EtajKudaNadoLifty ;Здесь указываем этаж на котором мы нажали кнопку вызова;

LDAB EtajKudaNadoLifty

SUBB EtajGdeLift ;Вычитаем из B значение где находиться лифт, а потом заномим в Б это значение;

CMPB SkorostLifta ;Сравниваем ячейку B с переменной Скорость лифта;

BHI Skorost ;Если ячейка Б больше то переходим на метку Skorost, иначе продолжаем работу программы;

JMP go2

Skorost:

MOVB #$ 01, SkorostDvijenia

go2:

CMPA EtajGdeLift ;Сравниваем ячейку, А с переменной ЭтажГдеЛифт;

BNE go ;Если неравны, но переходим на метку go, иначе продолжаем работу программы;

JMP quit

go:

CMPA EtajGdeLift ;Сравниваем ячейку, А с переменной ЭтажГдеЛифт;

BHI Vverh ;Если мы находимся выше лифта то переходим на метку Vverh, иначе продолжаем работу;

LDAA #$ 01

STAA DvigatelLifta ;Включаем двигатель, значит в переменную заносим 1;

DEC EtajGdeLift ;Опускаем лифт на один этаж;

JMP VizovLifta

Vverh:

LDAA #$ 01

STAA DvigatelLifta ;Включаем двигатель, значит в переменную заносим 1;

INC EtajGdeLift ;Поднимаем лифт на один этаж;

JMP VizovLifta

quit:

;Мы на нужном этаже;

LDAA #$ 00

STAA DvigatelLifta ;Выключаем двигатель, значит в переменную заносим 0;

LDAA #$ 01

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

LDAA #$ 02

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

LDAA #$ 05

STAA TimerOtritihDverei ;в таймер ввели 5 секунд;

CicleTimera:

LDAA #$ 00 ;Здесь указываем когда закрыть двери;

CMPA TimerOtritihDverei ;Сравниваем ячейку, А с переменной Таймера;

BNE goTimer ;Если неравны, но переходим на метку goTimer, иначе продолжаем работу программы;

JMP TimerItsOk ;Время вышло;

goTimer: DEC TimerOtritihDverei

JMP CicleTimera

TimerItsOk:

LDAA #$ 03

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

LDAA #$ 00

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

JMP CikeLifta

ORG StartVector

DC.W Lift

ЗАКЛЮЧЕНИЕ

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

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

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

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

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

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

Показать весь текст
Заполнить форму текущей работой