Формирование импульсных сигналов
Импульс можно получить последовательной выдачей сигналов включить и отключить с промежуточным вызовом подпрограммы временной задержки:
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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|