Разработка программы программно-управляемого генератора

  • Вид работы:
    Контрольная работа
  • Предмет:
    Информатика, ВТ, телекоммуникации
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    8,05 Кб
  • Опубликовано:
    2015-05-25
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка программы программно-управляемого генератора

Задание

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

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

Примечание к заданию

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

. В Приложении П.2 описаны структурная организация и особенности функционирования микроконтроллера КМ1816ВЕ51. Более подробную информацию можно получить в специализированной справочной литературе [6,9].

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

4. В Приложении П.4 приведен список сокращений, символических имен и аббревиатур.

генератор пауза импульс сигнал

Задания к контрольной работе

Рис. П1.6. Контрольная работа. Вариант 6.

РЕШЕНИЕ: В данном задании необходимо сформировать последовательность из трех пилообразных импульсов, имеющих время паузы tП, время нарастания tН и паузы между пилообразными импульсами длительностью Т. (рис.1).

Рисунок 1 - Заданная последовательность импульсов

Во время паузы на выходе формируется сигнал низкого уровня UMIN, а максимум пилообразного напряжения достигает величины UMAX.

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

Таким образом, можно принять:

tН> tП, Т = 3∙ (tН + tП) и UMAX > UMIN.

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

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

В этом методе нет согласования заданных значений максимальной амплитуды сигнала UMAX и длительности "низкого" уровня с используемым значением скорости роста "пилы" DU. Фактически, скорость роста равна минимальному числу 1H. Более правильно вычислять скорость роста как отношение (UMAX-UMIN) /tН. В этом случае сохраняются пропорции для заданных значений параметров, а точность достижения UMAX определяется погрешностью округления результата деления и минимально различимым разрядом числа. Если выбрать величину максимума и минимума пилообразного импульса соответственно UMAX= 80H и UMIN=20Н, то при DU=1Н величина времени роста пилы составит:


Примем tП =40Н, тогда длительность паузы составит:

Т = 3∙ (tН + tП) =3∙ (60Н+40Н) =1Е0Н.

Величина Т выходит за диапазон 8-ми разрядов регистров общего назначения микроконтроллера, поэтому для формирования паузы длительностью Т, следует разделить величину Т на 2 и два раза выполнить фрагмент кода с формированием сигнала низкого уровня длительностью:

Т1=Т/2=1Е0Н/2=F0H.

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

ORG 2000H; определение начального адреса ОЗУSJMPBEGINORG 2030H; определение начального адреса программы в ОЗУBEGIN: MOVR5, #3H; загрузка числа циклов "пилы"NATH: MOVR1, #80H; загрузка длительности "низкого" уровня сигнала (tП) MOVR2, #1H; загрузка скорости роста "пилы" по амплитуде (DU) MOVR3, #80H; загрузка максимального уровня "пилы" (UMAX) MOVP1, #20H; загрузка "низкого" уровня "пилы" (UMIN) LOOP: DJNZR1, LOOP; отсчет длительности "низкого" уровняROST: MOVA, P1; формирование роста "пилы" с учетом ADDA, R2; скорости ростаMOVP1, A; выдача отсчета амплитуды "пилы" в портMOVA, R3SUBBA, P1; если "пила" не достигла максимума, то сноваJZCYCLE; увеличение "пилы",SJMPROST; иначе переход к проверке количества цикловCYCLE: DJNZR5, NATH; отсчет числа цикловMOVR4, #F0H; загрузка длительности сигнала "низкого" уровня Т1MOVP1, #20H; загрузка "низкого" уровня сигнала (UMIN) LOOP1: DJNZR4, LOOP1; отсчет длительности "низкого" уровня: декремент R4 и цикл, если не 0, то загрузка в порт P1 значения "низкого" уровня (UMIN) MOVR4, #F0H; повтор формирования сигнала "низкого" уровня длительностью Т1MOVP1, #20H; загрузка "низкого" уровня сигнала (UMIN) LOOP1: DJNZR4, LOOP1; отсчет длительности "низкого" уровня: декремент R4 и цикл, если не 0, то загрузка в порт P1 значения "низкого" уровня (UMIN) SJMPBEGIN; возврат в начало программыEND; конец программы

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

Оператор "SJMP rel" организует короткий относительный переход внутри страницы к программе формирования последовательности импульсов с меткой "NATH", где rel - метка в диапазоне [-128. +127] байт относительно адреса следующей команды.

Операторы группы передачи данных "MOV Rn, #data8" выполняют загрузку в регистр восьми битной константы в десятичной или шестнадцатеричной системе счисления. В программе использована шестнадцатеричная система.

В начале программы по метке BEGIN устанавливается в регистре R5 число циклов формирования пилы, их три. Далее c метки NATH в регистры R1-R3 записываются необходимые константы, определяющие вид пилообразных импульсов.

Оператор "MOV Pn, #data8" позволяет передать во все линии порта P1 (P1.0-P1.7) все восемь разрядов восьми битной константы для вывода на ЦАП. Таким же образом может быть произведена предварительная установка уровня сигнала на выходе ЦАП (например, в начале может быть организован вывод низкого уровня сигнала). В данном случае развертка сигнала на осциллографе начинается с низкого уровня, поэтому в порт Р1 записывается число 20Н.

Оператор "DJNZ Rn, rel" определяет декремент (уменьшение) регистра и, если он не нуль, осуществляет переход по меткам "LOOP". В данном случае фактически осуществляется временная задержка, кратная числу, заданному константой, и времени выполнения операции микроконтроллером. В этой программе таким образом формируются длительности низкого уровней разной величины.

По окончании формирования низкого уровня сигнала UMIN с метки ROST, выполняются команды по формированию нарастающего фронта пилообразного напряжения.

Оператором "MOV A, P1" производится загрузка аккумулятора последним значением числа, выведенным в порт P1. Это число суммируется с заданной ступенькой роста "пилы" в регистре R2 ("ADD A, R2"). Далее полученное число из аккумулятора загружается в порт P1 ("MOV P1, A"), а в аккумулятор загружается заданный максимальный уровень "пилы" из регистра R3 ("MOV A, R3"). Затем производится вычитание из содержимого аккумулятора последнего числа, выведенного в порт P1 ("SUBB A, P1"), и, если аккумулятор не равен нулю, снова осуществляется переход по метке "ROST" для дальнейшего приращения "пилы" ("SJMP ROST"). В противном случае (если содержимое аккумулятора равно нулю) считается, что сигнал достиг своего максимального значения, и происходит переход в начало программы по метке "CYCLE" ("JZ CYCLE ") для выполнения цикла из трех раз. Командой DJNZ R5, NATH проверяется число циклов и если их меньше трех, то происходит возврат на генерацию очередного импульса по метке " NATH". Иначе, происходит переход к формированию сигнала низкого уровня длительностью Т. Для этого два раза запускается последовательность команд формирования сигнала низкого уровня длительностью Т1. Работа этой части кода происходит аналогично выше рассмотренному коду формирования сигнала низкого уровня длительностью tП.

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

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

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

Работа первых четырех строк этой программы аналогична работе предыдущей программы с идентичными операторами.

ORG 2000H; определение начального адреса ОЗУSJMPBEGINORG 2030H; определение начального адреса программы в ОЗУBEGIN: MOVR5, #3H; загрузка числа циклов "пилы"ACALLSAW; вызов подпрограммы формирования импульса "пилы"CYCLE: DJNZR5, BEGIN; отсчет числа цикловACALLDELAY; вызов подпрограммы формирования сигнала "низкого" уровня длительностью Т1ACALLDELAY; вызов подпрограммы формирования сигнала "низкого" уровня длительностью Т1SJMPBEGIN; возврат в начало программы; Подпрограмма формирования пилообразного импульсаSAW: MOVR1, #80H; загрузка длительности "низкого" уровня сигнала (tП) MOVR2, #1H; загрузка скорости роста "пилы" по амплитуде (DU) MOVR3, #80H; загрузка максимального уровня "пилы" (UMAX) MOVP1, #20H; загрузка "низкого" уровня "пилы" (UMIN) LOOP: DJNZR1, LOOP; отсчет длительности "низкого" уровняROST: MOVA, P1; формирование роста "пилы" с учетом ADDA, R2; скорости ростаMOVP1, A; выдача отсчета амплитуды "пилы" в портMOVA, R3SUBBA, P1; если "пила" достигла максимума, то JZEXIT; переход к возврату из подпрограммы,SJMPROST; иначе снова увеличение "пилы"EXIT: RET; возврат из подпрограммы; Подпрограмма формирования сигнала "низкого" уровня длительностью Т1DELAY: MOVR4, #F0H; загрузка длительности сигнала "низкого" уровня Т1MOVP1, #20H; загрузка "низкого" уровня сигнала (UMIN) LOOP1: DJNZR4, LOOP1; отсчет длительности "низкого" уровня: декремент R4 и цикл, если не 0, то загрузка в порт P1 значения "низкого" уровня (UMIN) RET; возврат из подпрограммыEND; конец программы

Далее в теле цикла из трех шагов происходит вызов подпрограммы формирования одиночного пилообразного импульса АCALL SAW, расположенной в текущем банке памяти программ. Затем два раза вызывается подпрограмма формирования сигнала "низкого" уровня длительностью Т1 ACALL DELAY, таким образом формируется сигнал "низкого" уровня длительностью Т.

Далее приводятся тексты подпрограмм SAW и DELAY, которые заканчиваются командой возврата из прерывания RET. Текст подпрограмм аналогичен соответствующим фрагментам первого варианта программы.

Литература

1. Магда Ю.С. Микроконтроллеры серии 8051: практический подход. - М.: ДМК Пресс, 2008. - 228 с.

. Проектирование цифровых устройств на однокристальных микроконтроллерах/ В.В. Сташин, А.В. Урусов, О.Ф. Мологонцева. - М.: Энергоатомиздат, 1990. - 224 с.

Похожие работы на - Разработка программы программно-управляемого генератора

 

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