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

Ввод информации с датчиков




Ожидание статического сигнала. Например, при подключении датчика к линии бита 4 порта 1 программа ожидания замыкания контакта будет иметь вид:

 

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

 

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

 

NAME InterruptTest

PUBLIC START

PROG SEGMENT CODE

RSEG PROG

jmp START; переход к основной программе

ORG 03H

jmp sInt0; вектор прерывания INT0

ORG OBH

jmp sIntT0; вектор прерывания по

; переполнению таймера T0

ORG 30H; основная программа

START: mov IE,#10000011b; разблокирование всех прерываний (бит IE.7),

; разрешение прерываний T0; (бит IE.1) и INT0 (бит IE.0)

setb TCON.0; установка типа прерывания INT0

; по срезу сигнала на входе P3.2

setb TCON.4; пуск таймера T0

LOOP: inc A; инкремент аккумулятора

jnz LOOP; переход, если не нуль

ORG 60H; процедуры обслуживания прерываний

sInt0: push PSW; сохранение в стеке регистров

Push ACC

Push B

Push DPL

Push DPH

Inc R5

; ….

pop DPH; восстановление регистров

Pop DPL

Pop B

Pop ACC

Pop PSW

reti; возврат из обработки INT0

 

IntT0: push PSW; сохранение в стеке регистров

Push ACC

Push B

Push DPL

Push DPH

Mov 20H,R5

; ….

Pop DPH

Pop DPL

Pop B

Pop ACC

pop PSW; восстановление регистров

reti; возврат из обработки T0

 

END

 

 

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

Например, выполняя деление упакованного двоично-десятичного данного на 16 можно отделить два полубайта, старшие разряды в аккумуляторе, а младшие (остаток) - в регистре В. Каждое данное выровнено вправо и, следовательно, может обрабатываться отдельно.

 

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

 

; DISBCD Выполняет распаковку двух упакованных двоично-

; десятичных чисел, полученных в аккумуляторе, и возвращает их

; произведение в аккумулятор также в двоично-десятичном

; упакованном формате

 

BEG: MOV B,#10H; Исходное значение делится

DIV АВ; на 16. В регистрах А и В хранятся выделенные цифры

; (каждая выровнена вправо)

MUL АВ; Регистр А содержит произведение в двоичном формате

; (0-99(десятичное)=0-63Н)

MOV В,#10; Произведение делится

DIV АВ; на 10. Регистр А содержит цифру десятков,

; В содержит остаток

SWAP А; Цифры в упакованном

ORL А,В; формате

RET

Задания 1.

1. Написать программу сложения или вычитания двух n-байтовых чисел, где число n будет являться параметром.

2. Написать программу, вычисляющую сумму чисел от 1 до n с помощью цикла.

3. Написать программу, вычисляющую первые n чисел Фибоначчи. (Т.е. последовательность, в которой каждый последующий член является суммой двух предыдущих: 0,1,1,2,3,...)

4. Написать программу нахождения наибольшего общего делителя по алгоритму Евклида. (Берется исходная пара чисел. Из большего числа вычитается меньшее, потом меньшее число из первой пары и разность первой пары становятся следующей парой, и алгоритм повторяется снова до тех пор, пока в паре не окажутся одинаковые числа. Это и будет наибольшим общим делителем.)

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

6. Написать программу поиска максимального элемента в массиве.

7. Перемножить два беззнаковых 16-разрядных числа, используя команду 8-разрядного умножения.

 

 

8. Написать программы для вычисления приведенных ниже выражений, где переменные являются 8-разрядными положительными числами. Частное и остаток результата отдельно записать в память: Y=12/(14*A+(B-C+35))

9. Y=(A*B-78)/(27*C+78)

10. Y=((4*A+B)-(2*A-45))/C

11. Y=(A+2*B-165)^2/(C+124)

12. Y=A^2/(25*B-C+119)

13. Y=A/(B-15*C+37).

Задания 2

Составить программу на основе команд арифметических операций для вычисления следующего выражения согласно своему варианту:

1. Y = (А + В) / С

2. Y = (А - В) * (С - В)

3. Y = А - С / В

4. Y = (А + В - С) * В

5. Y = А * В + С

6. Y = А - В + С

7. Y = (А - С) / В

8. Y=A + C-B*C

Принять значения А равным 14, В равным 2, С равным 4.

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

1. Объясните логику работы команд сложения и вычитания с учетом флагов С и OV.

2. Опишите способы адресации команд ADD, ADDC, SUBB.

3. Опишите способы адресации команд MUL, DIV.

4. Опишите способы адресации команд INC, DEC.

5. Как работает команда DA.

6. Для чего чаще всего используются команды INC и DEC.

7. В чем различие команд арифметических операций без учета и с учетом переноса.

8. Для каких целей применяются команды инкрементирования и декрементирования содержимого отдельных регистров.

9. Каким образом и с какой целью осуществляется десятичная коррекция аккумулятора.

10. В чем особенности команд умножения и деления MUL и DIV. В каком случае при их выполнении взводится флаг переполнения OV.

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

ЛОГИЧЕСКИЕ КОМАНДЫ. КОМАНДЫ СДВИГА И РАБОТЫ С БИТАМИ

 

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

 

Маскирование при вводе.

Ввести в регистр R7 информацию из линий 0,1,3,4 и 7:

MOV A,P1; Ввод байта из порта 1

ANL A,#10011011B; Маскирование

MOV R7,A; Передача

 

;Выполнение подпрограммы

ORG LOC; Восстановление счетчика адреса SERV:

PUSH PSW; Запоминание регистра PSW

PUSH AСС

PUSH В

PUSH DPI

PUSH DPH

MOV PSW,#1000B; Выбор регистрового банка 1

 

;..................;Тело подпрограммы

POP DPH; Восстановление регистров

POP DPL; в обратном порядке

POP В

POP AСС

POP PSW

 

RETI; Возврат к основной программе

 

2. Все биты, которые вызывают прерывания (IE0, IE1, TF0, TF1, RI, TI), могут быть программно установлены или сброшены с тем же результатом, что и в случае их аппаратной установки или сброса. Т. е. прерывания могут программно вызываться или ожидающие обслуживания прерывания могут программно ликвидироваться. Кроме того, прерывания по ~INT0, ~INT1 могут вызываться программной установкой Р3.2=0 и РЗ.З=0, как показано в приведенном ниже примере:

 

EA EQU IE.7

MAIN: MOV IE, #00000101b

MOV IP, #04H

SETB EA

MOV P3,#11110011B

В предложенном примере запросы прерывания ~INT0 и ~INT1, имеющие различный приоритет, поступают одновременно. При этом обслуживается прерывание с высшим приоритетом.

 

Пример простейшей организации обслуживания прерываний представлен в приведенной ниже демо-программе.

В этой программе с помощью директивы Ассемблера А51 ORG задаются векторы процедур обслуживания прерывания INT0, которое возникает по срезу сигнала на входе РЗ.2, и прерывания по переполнению таймера Т0. В основной программе производится разрешение и настройка этих прерываний. При пошаговом запуске программы в отладчике DS51 можно контролировать состояния системы прерываний и таймера, вызывая соответствующие команды мз меню Peripheral. Чтобы вызвать прерывание необходимо установить соответствующие флаги в регистре TCON: TF0 - TCON.5 или IE0 - TCON.1. Сделать это можно с помощью команды >ТСОN.1 = 1 в окне выполнения Ехе (смотри Приложение).

 

 

бит аккумулятора записывается единица.

4. Написать подпрограмму, определяющую четность числа единиц в аккумуляторе без использования флага паритета Р.

6. Написать программу, вычисляющую 12 значений массива А по формуле А[i]=(3 * (i + 4)) and 0FEH; i = 1...12.

Полученный массив записать в ВПД, начиная с адреса С200Н.

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

1. В чем заключается отличие команд JB и JNB?

2. В чем состоит отличие команд JMP и AJMP?

3. В чем состоит отличие команд JC и JNC?

4. Какие команды перехода влияют на флаги?

5. Какая команда проверяет флаг Z на равенство "0"?

6. Какие команды взаимодействуют с флагом Z?

7. Какие действия выполняет команда CJNE?

8. Какие действия выполняет команда DJNZ? Можно ли командой перехода изменить флаг Z?

9. Существует ли разница между командами ACALL и LCALL?

10. Каково значение над стеком, если Вы находитесь в подпрограмме?

11. Какие команды взаимодействуют с флагом С?

12. Какие виды переходов в МК51 вы знаете в зависимости от разрядности указываемого в команде адреса перехода или вызова. В чем отличия этих видов переходов и вызовов.

13. По каким условиям возможно организовать ветвящиеся вычислительные процессы в МК51.

14. В чем отличие команд возврата из подпрограмм RET и RETI.

15. Какие процессы и источники могут вызвать ситуации прерываний в МК51.

16. Какие условия могут вызвать блокировку прерывания и его необслуживание.

17. Каков порядок опроса флагов прерываний (приоритет обслуживания) установлен по умолчанию в МК51. Каким образом можно изменить эти приоритеты.

 

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

Поделиться:





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



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