Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Формирование импульсных сигналов




Импульс можно получить последовательной выдачей сигналов включить и отключить с промежуточным вызовом подпрограммы временной задержки:

 

PULS:;выдача импульса в линию 4 порта 3

ON: ANL P3, #11101111B;включение

CALL DELAY;временная задержка

OFF: ORL P3, #00010000B;отключение

...

Генерация меандра. В этом случае можно воспользоваться процедурой выдачи импульса PULS и подпрограммой задержки, равной половине периода сигнала DLYX:

 

MEANDR:

XCOR: CPL P3.4

ACALL DLYX

SJMP XCOR

Бесконечный периодический сигнал формируется в линии 4 порта 3. На остальных линиях сигналы остаются неизменными.

 

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

Простейшим способом измерения длительности импульса является программный. Для обнаружения событий (фронт и спад импульсного сигнала) в этом случае используются типовые процедуры WAIT, а отсчёт времени ведется программным способом. Для "положительного" импульсного сигнала, поступающего на вход Т0, программа измерения его длительности будет иметь вид:

 

MSCONT: MOV R7, #0;сброс счётчика

WAIT0: JNT0 WAIT0;ожидание фронта сигнала

COUNT: INC R7;инкремент счётчика

JT0 COUNT;ожидание спада сигнала

EXIT:...;выход из процедуры

 

 

WAITC: JB P1.4, WAITC;ожидание замыкания контакта датчика

 

Ожидание импульсного сигнала.

 

WAITC: JB P1.3, WAITC;ожидание Р1.3=0

WAIT0: JNB P1.3, WAIT0;ожидание Р1.3=1

 

Устранение дребезга контактов

Наибольшее распространение получили два программных способа ожидания установившегося значения:

1) подсчет заданного числа совпадающих значений сигнала;

2) временная задержка.

Суть первого способа состоит в многократном считывании сигнала с контакта. Подсчет удачных опросов, обнаруживших, что контакт устойчиво замкнут, ведется программным счетчиком. Если после серии удачных опросов встречается неудачный, то подсчет начинается сначала. Контакт считается устойчиво замкнутым, если последовало N удачных опросов. Число N подбирается экспериментально для каждого типа используемых датчиков и лежит в пределах от 5 до 50.

Пример программного подавления дребезга контакта приводится для случая, когда датчик импульсного сигнала подключен к входу Т0, счет удачных опросов ведется в регистре R3, N=20:

 

DBNC: MOV R3, #20;инициализация счетчика

DBNC1: JB P3.4, DBNC;если контакт разомкнут, то

;начать отсчёт опросов сначала

DJNZ R3, DBNC1;повторять, пока R3 не станет равным 0

 

Устранение дребезга контакта путем введения временной задержки.

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

 

DBNCDL: JTO DBNCDL;ожидание нуля на входе T0

CALL DELAY;вызов подпрограммы задержки

EXIT:...;выход из процедуры

 

Временная задержка в пределах 1-10 мс подбирается экспериментально для каждого типа датчиков и реализуется подпрограммой DELAY.

 

Подсчет числа импульсов между двумя событиями. Один из возможных вариантов процедуры подсчёта может быть реализован, если использовать вход T1 как вход счетчика событий. В аккумуляторе фиксируется число импульсов, представленное в двоичном коде (максимальное количество 255).

 

 

 

; Суммирование Z=W+Y

; (R0) – начальный адрес W

; (R1) – начальный адрес Y

; (R2) – длина слагаемых W и Y

 

CLR C; Сброс флага переноса

L: MOV A,@R0; Загрузка текущего байта W

ADDC A,@R1; Сложение

DAA; Коррекция

MOV @R0,A; Размещение текущего байта результата

INC R0; Продвижение указателей байт слагаемых

INC R1

DJNZ R2,L; Декремент R2, повтор, пока R2 не равно 0

 

Программа вычитает строку, указанную регистром R1, из строки, указанной регистром R0, с точностью, указанной регистром R2. После выполнения операции проверяется переполнение результата.

 

SUB: CLR C; 3аем=0

BEG: MOV A,@R0; Загрузка байта уменьшаемого

SUBB A,@R1; Вычитание байта

MOV @R0,A; Запоминание байта разности

INC R0; Установка указателей на следующее

INC R1; поле

DJNZ R2,BEG; Выполнение цикла до завершения операции

; После завершения цикла проверяется ситуация переполнения в последней итерации.

JNB OV,OK

;.............

; Программа восстановления старших разрядов

OK: RET

 

III. Умножение и деление.

Команда MUL вычисляет произведение двух целых беззнаковых чисел, хранящихся в регистрах А и В. Младшая часть произведения размещается в А, а старшая – в регистре-расширителе В. Если содержимое В оказывается равным нулю, то флаг OV сбрасывается, иначе – устанавливается. Флаг переноса всегда сбрасывается.

Например, если аккумулятор содержал число 200 (0C8H), а расширитель 160 (0A0H), то в результате выполнения команды MUL АВ получится произведение 32000 (7D00H). Аккумулятор будет содержать нуль, а расширитель - 7DH, флаг OV будет установлен, а флаг С – сброшен.

 

1. Пусть требуется умножить целое двоичное число на константу. Исходное число размещается в резидентной памяти данных (РПД), адрес младшего байта находится в регистре R0. Формат числа в байтах хранится в R0:

 

CONST EQU 123

 

MOV A,#0; Сброс аккумулятора

L: ADD A,@R0; Загрузка множимого

 

MOV B,#CONST; Загрузка множителя

MUL AB; Умножение

MOV @R0,A; Запись младшего байта частичного произведения

INC R0; Приращение адреса

MOV A,B; Пересылка старшего байта частичного произведения в аккумулятор

XCH A,@R0; Предварительное формирование очередного байта произведения

DJNZ R1,L; Цикл, если не все байты исходного числа умножены на константу

Полученное произведение размещается на месте исходного числа и занимает в РПД на один байт больше.

 

2. Команда DIV производит деление содержимого аккумулятора на содержимое регистра-расширителя. После деления аккумулятор содержит целую часть частного, а расширитель – остаток. Флаги C и OV сбрасываются. При делении на нуль устанавливается флаг переполнения, а частное остается неопределенным.

Команда деления может быть использована для перевода числа из одной системы счисления в другую.

Программа BINBCD выполняет преобразование целого двоичного 8-разрядного числа без знака, содержащегося в регистре А (значение в интервале 0-255), в трехзначное число двоично-кодированного формата BCD (два байта). Число сотен возвращается в поле переменной HUND, а числа десятков и единиц возвращаются в двоично-десятичном упакованном коде в поле другой переменной TENONE.

 

; BINBCD Выполняет преобразование 8-разрядного двоичного

; числа, хранящегося в регистре, в трехзначное число в

; двоично-десятичном упакованном формате.

; Число сотен размещено слева в поле переменной HUND,

; а числа десятков и единиц размещены в переменной TENONE.

ORG 21H

HUND DS 1

TENONE DS 1

BEG: MOV В,#100; Разделить на 100 для определения числа сотен

DIV АВ; Разделить остаток на 10

MOV HUND,А; для определения числа

MOV А,#10; сотен слева

ХСН А,В; Цифра десятков в А

DIV АВ; Остаток - цифра единиц

SWAP A; В А цифры в двоично-десятичном упакованном формате

ADD А,В

MOV TENONE,A

RET

 

Задания 1.

1. Составить программу для вычисления выражения 2n с использованием прерывания. Для выполнения операции умножения использовать операцию логического сдвига.

2. Составить программу для вычисления выражения факториала n! без использования рекурсии.

3. Составить программу для вычисления выражения Xn с использованием прерывания и команды MUL.

4. Составить программу для вычисления выражения 2X2 + 4Х + 1 с использованием прерывания и команды MUL.

5. Составить программу для вычисления выражения 3X + 4Y + 2 с использованием программного прерывания и команды MUL.

6. Составить программу, выводящую значения, сохраненные в стеке при вызове программы обработки прерывания.

7. Написать программу, которая записывает в регистры А и R0 начальный адрес своего местоположения в памяти.

8. Программу суммирования элементов массива (20 элементов),лежащих в диапазоне от MIN до MAX.

9. Программу поиска заданной цепочки символов в текстовом массиве.Признак завершения-код 1Аh.

10. Программу суммирования элементов массива 20 байт, которая завершается также при переполнении.

11. Программу, которая переставляет наоборот буквы в словах заданой строки в ASCII формате.

12. Найти моду (наиболее часто встречающееся значение) в массиве 20 целых чисел со знаком.

Контрольные вопросы.

2. Какие источники прерываний имеются в i8051?

3. Какие действия выполняет процессор при возникновении прерывания?

4. Опишите регистры, используемые при обслуживании прерывания.

5. Каковы условия возникновения прерывания?

 

ЛАБОРАТОРНАЯ РАБОТА №7

ОРГАНИЗАЦИЯ ВВОДА-ВЫВОДА

 

Практическая часть.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...