Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное_пособие.doc
Скачиваний:
70
Добавлен:
10.11.2019
Размер:
8.13 Mб
Скачать

5.2 Генерация импульсных сигналов управления с использованием программных задержек

5.2.1 Генерация последовательности импульсов с использованием программных задержек

Примерный вид импульсного сигнала, сформированного заданной программой на выходе 1-го разряда порта D приведен на рис.54.

Одиночный выходной импульс в разряде порта МК формируется в последовательности:

  • установка в нулевое состояние используемого разряда порта микроконтроллера;

  • задержка, равная паузе tп ;

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

  • задержка, равная длительности импульса tи.

Для получения импульсной последовательности эта процедура повторяется.

Рисунок 54

Примерный текст программы генератора импульсов в 1-м разряде порта D.

.INCLUDE "M16DEF.INC"

.ORG 0

LDI R16, 4 ;Организация стека в верхней ячейке ОЗУ

OUT SPH, R16 ;ее адрес для Mega16 - 45F. По сбросу

LDI R16, $5F ; SP=0

OUT SPL, R16

SBI DDRD, 1 ;Настройка разряда порта, в котором

;будут формироваться импульсы, на выход

NXT_PERIOD: CBI PORTD, 1 ;Начало паузы

RCALL T_PAUSE ;Вызов п.п. длительности паузы

SBI PORTD, 1 ;Фронт импульса

RCALL T_PULSE ; Вызов п.п. длительности импульса

RJMP NXT_PERIOD ;Переход на формирование след. периода

T_PAUSE: . ;Выбранный вид процедуры

. ;с рассчитанными значениями констант

.

RET

T_PULSE:

. ;Выбранный вид процедуры

. ;с рассчитанными значениями констант

.

.

.

RET

5.2.2 Генерация пакета импульсов

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

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

Рисунок 55

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

Пакет импульсов представлен на рис 4.

Пример 7 Примерный текст программы генератора пакета импульсов

.INCLUDE "M16DEF.INC" ;Включение файла с определением имен регистров

; и битов микроконтроллера ATmega16

.ORG 0 ;Начало программы с нулевой ячейки ПЗУ

LDI R16, 4 ;Организация стека в верхней ячейке ОЗУ

OUT SPH, R16 ;ее адрес для Mega16 - 45F, так как по сбросу

LDI R16, $5F ;МК устанавливаются SPH=0 и SPL=o

OUT SPL, R16

SBI DDRD, 1 ;Настройка разряда порта, в котором

;будут формироваться импульсы, на вывод

LDI R17 ,М ;М - число импульсов в пакете, R17- счетчик

;импульсов

NXT_PERIOD: CBI PORTD, 1 ;Начало паузы

RCALL T_PAUSE ;Вызов подпрограммы длительности паузы

SBI PORTD, 1 ;Фронт импульса

RCALL T_PULSE ; Вызов подпрограммы длительности импульса

DEC R17 ;Отсчет счетчиком импульса в обратную сторону

BRNE NXT_PERIOD ;Если импульс не последний в серии, то повторять

;(если в регистре не 0, то переход по метке)

CBI PORTD, 1 ;Обнулить разряд после окончания пакета

LOOP_I: RJMP LOOP_I ;Бесконечный цикл

T_PAUSE: . ;Выбранный вид процедуры

. ;с расcчитанными значениями констант

.

RET ;Возврат из подпрограммы

T_PULSE:

. ;Выбранный вид процедуры

;с расcчитанными значениями констант

.

.

.

RET ;Возврат из подпрограммы