Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
Всё возрастающее применение 8-разрядных микроконтроллеров (МК) семейства HC11 фирмы MOTOROLA во встраиваемых системах управления делает актуальной разработку относительно недорогих систем отладки, доступных широкому классу разработчиков.
Разработка нового отладочного средства должна производиться с учетом уже имеющегося парка отладочных средств и занимать определенную нишу в потребностях разработчика.
В общем случае, при создании нового электронного устройства, управляющим элементом которого предполагается использовать микроконтроллер, перед разработчиком встает ряд задач:
выбор типа МК (на основании количества необходимых линий управления, вычислительной мощности, объема памяти, требований к наличию периферийных устройств, габаритов, энергетических характеристик и прочего);
ознакомление со структурой, системой команд и особенностями функционирования выбранного МК;
написание и отладка программного обеспечения для МК.
В данном курсовом проекте необходимо разработать ШИМ-регулятор мощности двигателя постоянного тока типа ДПМ для микродрели на базе микроконтроллера MC68HC11. Требования, предъявляемые к проектируемой системе, определяются требованиями потребителей или пользователей, на которых рассчитывается проектируемое устройство.
Требования пользователя могут быть получены во время встречи с пользователем с целью выявления его нужд и определения того, какие действия должна выполнять система.
На первом этапе необходимо получить информацию, касающуюся того, что система должна делать. Для этого необходимо ответить на следующие вопросы:
Каковы общие требования к системе?
Каким образом задавать значение требуемой мощности?
Каким образом ускорить переход к требуемой мощности?
Каковы требования к сложности и удобству управления?
Что необходимо предусмотреть для аварийной ситуации?
Каким образом пользователь узнаёт текущее значение мощности?
Что нужно предусмотреть для нормальной работы микродрели при возобновлении состояния после аварийного останова?
Из ответов на эти вопросы можно сделать вывод относительно того, что будут представлять собой требования пользователей.
Исходя из заданных данных на курсовой проект, можно выделить следующие функциональные действия, которые должно выполнять наше устройство:
1 Анализ задачи
1.1 Функциональная спецификация системы
Функциональная спецификация включает два основных компонента:
1) список функций выполняемых системой;
2) описание интерфейса между системой и пользователем.
Так как система проектируется на основе информации, содержащейся как в требованиях пользователей, так и в функциональной спецификации, важно, чтобы функции, которые должны отображать требуемое поведение системы, были описаны достаточно подробно. Проанализируем требования, которые пользователь предъявляет к устройству, и определим, какие основные действия должна выполнять система. Таким образом, функциональная спецификация должна давать ответы на следующие вопросы:
Ответив на эти вопросы, можно приступить к составлению функциональной спецификации.
Требования пользователя:
Функциональная спецификация:
Если распределить эту информацию по категориям ВХОДЫ, ВЫХОДЫ и ФУНКЦИИ, функциональную спецификацию микродрели можно представить в следующем виде:
ВХОДЫ.
Кнопка уменьшения мощности.
Кнопка увеличения мощности.
Кнопка останова
ВЫХОДЫ.
Семисегментный индикатор.
Управление мощностью дрели.
ФУНКЦИИ.
Посредством кнопок выбираем значение мощности, обеспечиваем аварийный останов и автоповтор.
Индикатор индицирует выбранную мощность.
1.2 Описание интерфейса между системой и пользователем
Важным вопросом при разработке функциональной спецификации является взаимодействие между пользователем и системой. В системе регулировки мощности взаимодействие между системой и пользователем осуществляется с помощью кнопок и семисегментного индикатора (Рисунок 1.1).
Рисунок 1 Интерфейс между системой и пользователем
Учет человеческих факторов при проектировании должен приводить к простоте системы и легкости ее использования. Эти цели достигаются посредством проектирования надлежащего системного интерфейса. На основании списка функций выполняемых системой определим интерфейс между системой и пользователем.
Для переключения уровней мощностей предусмотрены две кнопки: «Ув. мощности» и «Ум. мощности». Для аварийного останова кнопка «Останов».
Управление системой производится следующим образом. При включении микродрели в сеть питания происходит инициализация (мощность = 0). При нажатии кнопки «Ув. мощности» микродрель начинает работать (уровень мощности равен 1, или при автоповторе соответствующая). Если перед работой нужно установить определённый уровень мощности (не 1-ый), нажимается кнопка «Останов»; кнопками «Ув. мощности» и «Ум. мощности» задается мощность и затем повторным нажатием кнопки «Останов» микродрель, плавно разгоняясь, начинает работать на заданной мощности. Если во время работы нужно быстро перейти к какой-либо скорости удерживаем соответствующую клавишу, что вызывает автоповтор. Для паузы в работе или при аварийной ситуации нажимаем кнопку «Останов». Для возобновления работы нажимаем эту кнопку повторно.
На семисегментном индикаторе отображается соответствующее значение мощности.
2 Предварительное проектирование системы
2.1 Разбиение системы на модули
Используя предварительные данные, разобьем нашу проектируемую систему на отдельные модули.
Полученная таким образом модульная структура системы показана на рисунке 2.
Рисунок 2 Модульная структура системы
Каждый модуль состоит из набора функций, принадлежащих этому модулю. Способ распределения функций по конкретным модулям зависит от личного предпочтения разработчика. Если модуль содержит слишком много функций, он может быть разделен на несколько модулей. С целью упрощения несколько модулей, каждый из которых содержит небольшое число функций, могут быть объединены в один модуль. Модульная структура позволяет легко добавлять функции к системе, а также изменять или удалять часть системы в любой момент цикла ее проектирования.
Рассмотрим, как распределяются функции по модулям системы управления мощности двигателя постоянного тока.
считывание состояния кнопок Ув./Ум. мощности
считывание состояния кнопки аварийного останова
3. Выходной модуль включает:
подача управляющего сигнала на двигатель постоянного тока
вывод на семисегментный индикатор
4. Модуль мощности включает единственную функцию задания мощности в соответствии с нажатием кнопок.
5. Модуль инициализации включает:
инициализацию системы при начальном включении (включение питания);
6. Модуль ШИМа управляет формированием импульсов.
7. Модуль аварийного останова включает:
прекращение работы двигателя при нажатии на кнопку аварийного останова
возобновление работы двигателя
8. Модуль индикации управляет выводом на семисегментный индикатор
Полная функционально-модульная структура устройства управления мощностью двигателем, включающая функции для каждого модуля, показана на рисунке 3.
Рисунок 3 Функционально-модульная структура устройства управления
2.2 Соотношение между аппаратными и программными средствами
Связь между аппаратными и программными модулями системы устройства управления микродрели представлена на рисунке 4.
Связь между программными модулями и модулем микроконтроллера показана жирной стрелкой, так как программные модули реализуются как процедуры микроконтроллера. Поскольку входная информация передается через модуль интерфейса ввода под управлением программного входного модуля, связь между этими модулями показана пунктирной линией. Подобным же образом показана связь между программным выходным модулем и модулем интерфейса вывода.
Рисунок 4 Связь между аппаратными и программными модулями
Модуль ШИМа имеет аппаратную и программную часть. Программная часть осуществляет управление ШИМом и задаёт его работу.
Входной и выходной модули необходимо поместить в программную часть. Они непосредственно считывают (или записывают) из портов (в порты) ввода (вывода) данные и анализируют их.
Модули инициализации проще всего выполнить при помощи программного обеспечения.
Все остальные модули отнесем к аппаратной части.
2.3 Построение структурной схемы аппаратной части системы
На основе функций, выполняемых системой, построим структурную схему аппаратной части системы. Процессорный модуль является ядром системы. В нем происходит обработка входной информации и генерация управляющих воздействий на все компоненты системы. В ПЗУ хранится исполняемая программа и подпрограммы для обработки прерываний. А в ОЗУ содержаться временные переменные. Также в отдельный блок можно выделить модуль генератора тактовых импульсов. Обмен данными между блоком центрального процессора и остальными блоками устройства управления осуществляется через порты.
Для подключения внешних устройств у микроконтроллера предусмотрено пять 8-ми разрядных портов.
В нашем случае, периферийными устройствами будут служить: кнопки, двигатель постоянного тока, семисегментный индикатор. Эти устройства подключаются к устройству ввода - вывода.
Структурная электрическая схема устройства приведена на чертеже БГУИ.ХХХХХХ.001 Э1.
3 Проектирование аппаратных средств системы
Основой аппаратной части является микроконтроллер МС68НС11А8.
В нашем случае микроконтроллер будет работать в однокристальном режиме, поэтому на вход MODA нужно подать логический '0', а на вход MODB логическую 1.
Микроконтроллер адресует до 64 Кбайт памяти (адреса $0000-SFFFF), которые делятся на 16 страниц по 4 Кбайта. Полный объем памяти доступен в расширенном режиме, когда к выводам портов В и С подключается внешняя память. В нашем случае используется однокристальный режим работы, поэтому доступна только внутренняя память микроконтроллера: ПЗУ, РПЗУ, ОЗУ, а порты В и С служат для обмена данными с внешними устройствами. Две последние страницы адресного пространства (адреса $EOOO-$FFFF) занимает внутреннее масочное ПЗУ, содержимое которого программируется в процессе изготовления микроконтроллера по заказу пользователя. В ПЗУ будет содержаться наша программа. РПЗУ размещена по адресам SB600-5B7FF и в данном курсовом проекте не используется ОЗУ при начальной установке микроконтроллера (процедура RESET) занимает адресное пространство $OOOO-$OOFF. Распределение адресного пространства памяти микроконтроллера показано на рисунке 5.
Рисунок 5 Карта распределения адресного пространства
Служебные регистры определяют конфигурацию и режимы работы микроконтроллера. Содержимое регистра INIT (рисунок 6) определяет старшие четыре разряда адреса (номер страницы) размещения ОЗУ (биты RAM3-RAM0) и блока внутренних регистров (биты REG3-REG0). При начальной установке микроконтроллера биты данного регистра принимают значения RAM3-RAM0 = 0000 (обращение к странице 0), REG3-REG0 = 0001 (обращение к странице 1). В данном курсовом проекте значения, установленные после начальной установки изменяться не будут.
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
RA |
RA |
RA |
RA |
RE |
RE |
RE |
RE |
Рисунок 6 Служебный регистр INIT (адрес $103D)
Регистр CONFIG определяет конфигурацию микроконтроллера, разрешая или запрещая использование внутренних ПЗУ, РПЗУ и блока контроля функционирования Регистр OPTION определяет функционирование отдельных блоков микроконтроллера. Содержимое регистров HPRIO, INIT, OPTION записывается непосредственно после начальной установки микроконтроллера и затем может быть только считано. Исключение составляют только разряды PSEL3-PSEL0 в регистре HPRIO и разряды ADPU, CSEL в регистре OPTION, которые могут изменяться в процессе работы микроконтроллера путем записи в эти регистры. Содержимое регистра ONFIG программируется таким же образом, как и содержимое внутреннего РПЗУ, и может изменяться только в процессе программирования. Этим обеспечивается его сохранение при отключении питания. Синхронизация микроконтроллера формируется следующей схемой (рисунок 7).
Рисунок 7 - Схема синхронизации микроконтроллера.
Резистор R1 имеет номинал 10 МОм , конденсаторы С1, С2 номинал 24 пФ. ZQ - кварцевый резонатор (частота 8 МГц). Схема синхронизации подключается к выводам XTAL и EXTAL микроконтроллера. Длительность такта микроконтроллера Тс = 1/Ft определяется генератором тактовых импульсов (ГТИ). Частота следования тактовых импульсов Ft задается кварцевым резонатором. При этом частота F, в 4 раза меньше частоты внешнего резонатора или генератора Ft = Fg/4. Импульсы с частотой Ft поступают на выход Е микроконтроллера и используются для синхронизации работы других устройств системы.
Так как микроконтроллер работает в рабочем режиме (однокристальном или расширенном), то в процессе начальной установки при включении питания или поступлении сигнала RESET# = 0 в программный счетчик PC загружаются два байта: старший байт РСН из ячейки памяти с адресом $FFFE, младший байт PCL - SFFFF. Эти байты являются адресом первой команды, выполняемой микроконтроллером после начальной установки. Так как микроконтроллер работает в однокристальном режиме, данные байты выбираются из внутреннего. При включении питания требуется время 4064Тс для запуска ГТИ и начального состояния регистров, после чего начинается нормальная работа микроконтроллера. Для начальной установки по сигналу RESET# его длительность должна быть не меньше 4ТС. В курсовом проекте для обмена данными с внешними устройствами используются параллельные порты В, С и D, а также вход . Порты A и Е не используются.
К входу подключена кнопка аварийного останова, посредством которой подаётся немаскируемый сигнал прерывания.
Порт В (регистр PORTB, адрес $1004) используется как 8-разрядный порт вывода данных. Т.к. в регистре управления PIOC установлено значение разряда HNDS = 1, то порт В работает в режиме нестробированного вывода, при котором не происходит формирование стробирующего сигнала на выходе STRB. На выходы PB0-PB3 подключен семисегментный дешифратор CD4543B фирмы Texas Instruments, который преобразует двоично-десятичный код для отображения на семисегментном индикаторе. Из входов микросхемы, помимо входов данных, особое внимание заслуживают три: LD, BL и Ph. BL вход, при подаче логической единицы на который на выходах дешифратора образуется комбинация из всех нулей, что соответствует очистке семисегментного индикатора. При подаче на вход LD '1' на выходах дешифратора формируется комбинация для отображения на индикаторе, соответствующая текущей комбинации, которая подаётся на входы данных. При подаче 0 на вход LD в независимости от входной комбинации на входах данных, на индикаторе отображается последняя комбинация, при которой на LD был подан '1'. Вход Ph отвечает за вывод комбнации на выходы дешифратора. При подаче на этот вход '1' комбинация инвертированная.
При подаче неверной комбинации (от 10 до 15) семисегментный индикатор также очищается.
Дешифратор подключён к индикатору через токоограничительные резисторы. Семисегментный индикатор подключается с помощью схемы, представленной на рисунке 8.
Рисунок 8 Схема подключения семисегментного индикатора
В данном проекте порт С служит для ввода данных проверка состояний кнопок уменьшения, увеличения мощности.
Двунаправленный порт D (регистр PORTD, адрес $1008) имеет шесть выводов PD5-PD0, которые служат входами или выходами данных в зависимости от установки значения битов в регистре направления DDRD (адрес $1009). В данной работе, все шесть выводов настроены на вывод данных. На выход PD0 подключён двигатель постоянного тока. Схема его подключения представлена на рисунке 9.
Рисунок 9 Схема подключения двигателя постоянного тока
В данной работе был выбран двигатель постоянного тока типа ДПМ-25-02. Двигатель управляется с помощью малогабаритного полевого транзистора IRFD024 фирмы International Rectifier. Для управления этим транзистором не требуется драйвер, так как он надежно открывается напряжением логической 1, равным 5 В, и нагрузочная способность порта микроконтроллера достаточна для этой цели. Резистор R2 обеспечивает закрытое состояние транзистора, когда после включения питания микроконтроллер находится в сброшенном состоянии. При отсутствии этого резистора в моменты включения питания двигатель может делать кратковременные рывки. Резистор R1 нужен для ограничения тока перезарядки затвора полевого транзистора в моменты смены логических уровней. Помимо ограничения допустимого тока, резистор R1 также влияет на скорость нарастания напряжения на двигателе. Если поставить на его место резистор меньшего номинала, то от резких импульсов тока управления начнет страдать микроконтроллер, давая сбои и зависая. Если ставить резистор с большим сопротивлением, скорость нарастания напряжения на двигателе может настолько снизиться, что транзистор перестанет успевать за частотой переключения ШИМа.
Диоды VD2, VD4 служат для подавления резких выбросов напряжения в моменты переключения транзистора. В отсутствие диодов эти импульсы приводят к сбоям в работе микроконтроллера. Быстрый диод VD3 необходим для гашения возможной ЭДС самоиндукции обмотки двигателя. Стабилитрон VD1 защищает шину питания от импульсов высокого напряжения, с которыми не успевает справляться стабилизатор. Т.к. у нас используется двигатель ДПМ на напряжение питания 27 В, то питать прибор следует от источника постоянного нестабилизированного напряжения около 30 В. Больше 35 В не рекомендуется, так как будет превышено максимально допустимое входное напряжение стабилизатора КР1157ЕН5Б и конденсатора C2. Для защиты полевого транзистора от перегрева и выхода из строя из-за более длительной блокировки вала или коротком замыкании обмотки двигателя служит предохранитель FU1.
В контроллере имеется встроенный таймер. Он реализован на базе 16-разрядного счетчика TCNT (адрес старшего байта $100Е, адрес младшего байта $100F). Этот счетчик запускается при начальной установке микроконтроллера, и после запуска его состояние может быть только считано, например командами LDD, LDX, LDY.
Функционирование таймера определяется 8-разрядными регистрами управления. В данном курсовом проекте таймер используется для периодической генерации запросов прерывания. Для разрешения генерации прерывания реального времени устанавливаем бит RTII регистра TMSK2 (адрес $1024) в 1.
Для прерываний используется специальный флаг RTIF в регистре TFLG2 (адрес $1025). Этот флаг принимает значение RTIF = 1 через заданное время Т = 8192TCKt, где величина коэффициента Кt определяется разрядами RTR1-RTR0 в регистре PACTL (адрес $1026). Сброс признака RTIF в состояние 0 производится путем записи соответствующего значения в регистр TFLG2.
В данном курсовом проекте разряды RTR1-RTR0 равны '0'. Разряд разрешения запроса прерывания RTII в регистре TMSK2 имеет значение RTII = 1. Т.к. к микроконтроллеру подключён кварцевый резонатор с частотой 8 МГц, период работы схемы генерации прерываний реального времени равен 4.10 мс.
Регистры TMSK2, TFLG2 и PACTL представлены на рисунке 10.
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
TOI |
RTII |
PAOVI |
PAII |
0 |
0 |
PR1 |
PR0 |
TMSK2 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
DDRA7 |
PAEN |
PAMOD |
PEDGE |
0 |
0 |
RTR1 |
RTR0 |
PACTL |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
TOF |
RTIF |
PAOVF |
PAIF |
0 |
0 |
0 |
0 |
TFLG2 |
Рисунок 10 - Регистры TMSK2, TFLG2 и PACTL
При подаче на РC0 или РC1 логический уровень сигнала 0 соответственно увеличивается или уменьшается уровень мощности. При подаче '0' на вход вызывается подпрограмма прерывания по внешнему сигналу.
Разряд РD0 порта D посредством ШИМа управляют мощностью двигателя. Допустим требуемый уровень мощности “6”, тогда подаём на этот разряд '1' шесть тактов из восьми. Оставшиеся два такта подаем уровень '0'. Один такт равен 4,10 мс. Т.е. частота на выходе ШИМа = 243 Гц, что достаточно для нормальной работы двигателя.
Разряды PB0..PB3 порта B представляют собой двоично-десятичный код 8-4-2-1.
Электрическая принципиальная схема устройства управления мощностью двигателя представлена на чертеже БГУИ.ХХХХХХ.002 Э3.
4 Проектирование программного обеспечения
С точки зрения программиста разработанная система управления состоит из программно доступных регистров микроконтроллера, трёх портов В, C и D и входа . Вся работа системы заключается в определении состояния входных портов, выполнения определённых вычислений и выводе данных из микроконтроллера Motorola (ввод данных в порты).
Блок-схема алгоритма работы программы приведена на чертеже БГУИ.ХХХХХХ.003 Э8 приложения Б.
Кнопка «Ув. мощности» подсоединена к разряду РС0 порта С. Когда она нажата в данный разряд поступает логическая '0'. После чего проверяется на нажатие кнопка «Ум. мощности» дабы по одновременному нажатию двух кнопок мощность не менялась. Кнопка «Ум. мощности» подсоединена к разряду PC1 порта С.
В процессе работы системы порт С постоянно опрашивается и значение текущей мощности в виде двоично-десятичного кода подаётся на разряды PB0-PB3 порта B, к которым через семисегментный дешифратор подключён семисегментный индикатор.
К разряду PD0 порта D подключён двигатель постоянного тока. Активный уровень логическая '1'. Управления мощностью двигателя реализуется посредством ШИМ. Для установления длительности импульсов используется встроенный таймер и прерывания реального времени с периодом 4,10 мс.
Ко входу подключена кнопка «Останов», при нажатии на которую на вход подаётся '0'. Вызывается немаскируемое прерывание, в котором запрещается прерывания реального времени и мощность устанавливается в ноль.
Полный листинг программы приведен в приложении А. В таблице 1 приведена карта памяти для устройства управления мощностью двигателя.
Таблица 1 Карта памяти
ОЗУ $0000 - $001F $0020 - $00FF |
Стек Переменные |
Регистры и Порты $1002 $1003 $1004 $1008 $1025 $1024 $1026 $1007 $1009 |
PIOC PORTC PORTB PORTD TFLG2 TMSK2 PACTL DDRC DDRD |
ПЗУ $E000 - $E082 $E085 - $E0A7 $E0A8 - $E0DA $FFF0 - $FFFE |
Основная программа Пользовательские подпрограммы Подпрограмма обработки прерывания Вектора обработки прерываний |
ЗАКЛЮЧЕНИЕ
В ходе выполнения курсового проекта было разработано устройство управления мощностью двигателя согласно заданию.
В пояснительной записке описаны структурная и принципиальная схема устройства, разработано программное обеспечение. А так же описан алгоритм функционирования устройства управления мощностью двигателя постоянного тока посредством ШИМ. По разработанному алгоритму составлена программа.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
Методическое пособие по микроконтроллеру семейства М68НС11
Микропроцессорная техника: Учеб. пособие по курсовому проектированию по дисциплине для студ. спец. 40 02 02 «Электронные вычислительные средства» дневной формы обуч. / А.А. Петровский, М.В. Качинский, А.Б. Давыдов и др. Мн.: БГУИР, 2005. 51 с.: ил.ISBN 985-444-837-1
Однокристальная микроЭВМ MC68HC11A8. Техническое описание.
ПРИЛОЖЕНИЯ
Приложение А
Листинг программы:
0001 0000 RAM EQU $0000
0002 1000 REG EQU $1000
0003 e000 ROM EQU $E000
0004 1000 TCNT EQU REG+$OE
0005 *----timer
0006 1023 TFLG1 EQU REG+$23
0007 1022 TMSK1 EQU REG+$22
0008 1025 TFLG2 EQU REG+$25
0009 1024 TMSK2 EQU REG+$24
0010 1026 PACTL EQU REG+$26
0011 *----ports
0012 1004 portb EQU $1004 *регистр данных порта B
0013 1003 portc EQU $1003 *регистр данных порта C
0014 1008 portd EQU $1008 *регистр данных порта D
0015 1002 pioc EQU $1002 *регистр управления портов B и C
0016 1007 ddrc EQU $1007 *регистр определения напр.выв.п.С
0017 1009 ddrd EQU $1009 *регистр определения напр.выв.п.D
0018 *----Маски
0019 0001 minus EQU $01 *м. для выделения бита Уменьшение мощности с порта С[0]
0020 0002 plus EQU $02 *м. для выделения бита Увеличение мощности с порта С[1]
0021 0040 rtif EQU $40 *м. для снятия маски прерывания rtif в рег.tflg2
0022 0010 hnds EQU $10 *м. для установки бита HNDS в регистре PIOС (порт B -нестробированный вывод, порт С - двунаправленный обмен)
0023 *----RAM
0024 001f ORG RAM+$1F
0025 001f STACK RMB 1
0026 0020 08 cnttime FCB $08
0027 0021 01 flag FCB $01
0028 0022 00 power FCB 0
0029 0023 00 razgon FCB 0
0030 0024 00 pwm_skv FCB 0
0031 *----interrupt
0032 fff0 ORG ROM+$1FF0
0033 fff0 e0 a8 VRTI FDB OBRRTI
0034 fff2 e0 bb VIRQ FDB OBRIRQ
0035 fffe ORG ROM+$1FFE
0036 fffe e0 00 VRST FDB START
0037 *----ROM
0038 e000 ORG ROM
0039 e000 8e 00 1f START: LDS #STACK *Занесение в рег.SP нач адреса стека
0040 e003 86 00 LDAA #$00
0041 e005 b7 10 26 STAA PACTL *период работы схемы 4,10 мс (Е=2 МГц)
0042 e008 86 00 LDAA #00
0043 e00a b7 10 24 STAA TMSK2 *запрет прерывания реального времени
0044
0045 e00d b6 10 02 LDAA pioc
0046 e010 8a 10 ORAA #hnds
0047 e012 b7 10 02 STAA pioc
0048
0049 e015 86 00 LDAA #$00 *ИНИЦИАЛИЗАЦИЯ ВСЕГО
0050 e017 b7 10 07 STAA ddrc *ПОРТА С НА ВВОД
0051
0052 e01a 86 ff LDAA #$ff *
0053 e01c b7 10 09 STAA ddrd *все выводы порта D - вывод данных
0054
0055 e01f 86 00 LDAA #0
0056 e021 b7 10 04 STAA portb *семисегментный индикатор показывает 0
0057 e024 b7 10 08 STAA portd *мощность=0,
0058
0059 *----основная программа
0060
0061 e027 96 22 ost: LDAA power *
0062 e029 97 23 STAA razgon *
0063
0064 e02b 86 08 incr: LDAA #$08
0065 e02d 97 20 STAA cnttime *счётчик циклов = 8
0066 e02f 86 00 LDAA #$00 *
0067 e031 b7 10 24 STAA TMSK2 *запрет прерывания реального времени
0068
0069 e034 b6 10 03 LDAA portc *считываем порт С
0070 e037 94 02 ANDA plus *выделение бита, соответствующего кнопке "Ув. мощн."
0071 e039 26 09 BNE decr *кнопка не нажата, проверяем кнопку "Ум. мощн."
0072 e03b 96 22 LDAA power *иначе
0073 e03d 81 08 CMPA #8 *проверяем на выход за пределы возможного ур-ня мощн. (>8)
0074 e03f 27 03 BEQ decr *если 8 ур-нь - переходим к проверке кнопки Ум. мощн.
0075 e041 7c 00 22 INC power *если был <8, то увеличиваем переменную мощности
0076
0077 e044 b6 10 03 decr: LDAA portc
0078 e047 94 01 ANDA minus *выделение бита, соответствующего кнопке "Ум. мощн."
0079 e049 26 09 BNE indi *кнопка не нажата, выводим текущую мощность на индикатор
0080 e04b 96 22 LDAA power *иначе
0081 e04d 81 00 CMPA #0 *проверяем на выход за пределы возможного ур-ня мощн. (<0)
0082 e04f 27 03 BEQ indi *если 0 ур-нь, показываем на индикаторе
0083 e051 7a 00 22 DEC power *иначе уменьшаем переменную мощности
0084
0085 e054 96 22 indi: LDAA power *
0086 e056 b7 10 08 STAA portd *Вывод переменной мощности на индикатор
0087
0088 e059 bd e0 85 JSR pow *переход к подпрограмме формир. вектора мощн.
0089
0090 e05c 7d 00 21 TST flag *порверяем флаг работы
0091 e05f 27 c6 BEQ ost *если он равен 0, запрещаем прерывания реального времени
0092
0093 e061 7d 00 23 TST razgon *проверяем значение мощности до прерывания
0094 e064 27 12 BEQ razr *если равна нулю - переходим к установлению текущего ур-ня мощн.
0095 e066 7f 00 24 CLR pwm_skv *если не равна - очищаем вектор мощности
0096 e069 7d 00 23 razg: TST razgon
0097 e06c 27 0a BEQ razr
0098 e06e 86 40 LDAA #rtif *
0099 e070 b7 10 24 STAA TMSK2 *разрешение прерывания реального времени
0100 e073 bd e0 96 JSR plavn *переходим к подпрограмме плавного разгона
0101 e076 20 f1 BRA razg *возвращаемся к проверке значения мощности
0102
0103 e078 86 40 razr: LDAA #rtif *
0104 e07a b7 10 24 STAA TMSK2 *разрешение прерывания реального времени
0105 e07d 7d 00 20 prov: TST cnttime *
0106 e080 27 a9 BEQ incr *цикл закончился - переход к осн. прог.
0107 e082 7e e0 7d JMP prov *цикл не закончился - переход в начало цикла
0108
0109 *----Подпрограмма формирования вектора мощности
0110
0111 e085 7f 00 24 pow: CLR pwm_skv *очищаем Вектор
0112 e088 96 22 LDAA power *загружаем в регистр А переменную мощности
0113 e08a 27 09 BEQ zero *если она равна нулю - выход. Вектор = 0
0114 e08c 78 00 24 vector: LSL pwm_skv *иначе вектор сдвигаем влево
0115 e08f 7c 00 24 INC pwm_skv *увеличиваем на 1
0116 e092 4a DECA *количество итераций = переменной мощности
0117 e093 26 f7 BNE vector *если счётчик цикла не равен 0, повторяем цикл
0118 e095 39 zero: RTS *иначе выход из подпрограммы
0119
0120 *----Подпрограмма плавного разгона
0121
0122 e096 78 00 24 plavn: LSL pwm_skv *формируем вектор мощности
0123 e099 7c 00 24 INC pwm_skv *постепенно увеличивая его до требуемого ур-ня
0124 e09c 7a 00 23 DEC razgon *уменьшаем переменную разгона
0125 e09f 7d 00 20 prov2: TST cnttime *
0126 e0a2 27 03 BEQ exit0 *цикл закончился - переход к осн. прог.
0127 e0a4 7e e0 9f JMP prov2 *цикл не закончился - переход в начало цикла
0128 e0a7 39 exit0: RTS
0129
0130 *----Подпрограмма обработки прерывания RTIF
0131
0132 e0a8 86 01 OBRRTI: LDAA #%00000001
0133 e0aa 94 24 ANDA pwm_skv *выделяем младший бит Вектора
0134 e0ac b7 10 08 STAA portd *загружаем его в порт D[0]
0135 e0af 76 00 24 ROR pwm_skv *циклически сдвигаем вектор вправо
0136 e0b2 7a 00 20 DEC cnttime *уменьшаем счётчик циклов
0137
0138 e0b5 86 40 LDAA #rtif *
0139 e0b7 b7 10 25 STAA TFLG2 *сброс флага RTIF
0140
0141 e0ba 3b RTI
0142
0143 *----Подпорграмма обработки прерывания IRQ#
0144
0145 e0bb 7d 00 21 OBRIRQ: TST flag *проверяем флаг работы двигателя
0146 e0be 26 0b BNE zapret *если он не равен нулю (равен 1), останавливаем двигатель
0147 e0c0 86 01 LDAA #1 *иначе
0148 e0c2 97 21 STAA flag *устанавливаем флаг в 1
0149 e0c4 86 40 LDAA #rtif *
0150 e0c6 b7 10 24 STAA TMSK2 *разрешаем прерывание реального времени
0151 e0c9 20 0f BRA exit *выходим из прерывания
0152 e0cb 7f 00 21 zapret: CLR flag *сбрасываем флаг в 0
0153 e0ce 86 00 LDAA #$00 *и
0154 e0d0 b7 10 24 STAA TMSK2 *запрещаем прерывание реального времени
0155 e0d3 b7 10 08 STAA portd *мощность=0
0156 e0d6 96 22 LDAA power *сохраняем текущий ур-нь мощности
0157 e0d8 97 23 STAA razgon *для плавного разгона
0158 e0da 3b exit: RTI *выходим из прерывания
$0000
1000
$B600
$FFFF
Внешняя память
0000
00FF
$E000
1000
103F
B600
B7FF
FFC0
FFFF
256 байт ОЗУ
64 байта блок регистров
512 байт РПЗУ
Векторы
E000
FFFF
8К ПЗУ
Внешняя память
Внешняя память