Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АТП с ответами.doc
Скачиваний:
2
Добавлен:
08.11.2019
Размер:
150.53 Кб
Скачать

1. На порт ввода МПС поступают импульсы от тактового генератора амплитудой 5 В с частотой один герц. Предложить фрагмент принципиальной (функциональной) электрической схемы сопряжения МПС и генератора. Составить программу, накапливающую число секунд в двоично- десятичном коде в любых двух восьмиразрядных регистрах.

mov R1,#0

mov R2,#0

L1: jb P1.0,L1

L2: jnb P1.0,L2

inc R1

cjne R1,#10,L3

mov R1,#0

L3: inc R2

cjne R2,#10,L1

mov R2,#0

sjmp L1

2. Составить подпрограмму на Ассемблере, осуществляющую подсчет числа единичных битов в коде числа, хранящегося в ячейке памяти МПС. Определить механизм передачи параметров в подпрограмму, привести пример вызова разработанной подпрограммы.

SetBitCount: mov R0,#0

mov R1,#8

Next: rlc A

jnc L1

inc R0

L1: djnz R1, Next

ret

Пример вызова:

mov A,#56h ; загрузка в подпрограмму кода числа

acall SetBitCount ; вызов подпрограммы

3. Цифровой восьмиразрядный датчик (выходы типа “открытый коллектор”), измеряющий температуру, подключен к порту ввода МПС. Предложить фрагмент принципиальной (функциональной) электрической схемы сопряжения МПС и датчика. Составить программу, осуществляющую опрос датчика и подсчет числа отсчетов температуры, превыщающих минимальный уровень, заданный константой в памяти программ.

mov R1,#0 ;

Next: mov A, P1 ;

mov R2,A ;

mov A,#Minimun ;

clr c ;

subb A,R2 ;

jnc Next ;

inc R1 ;

sjmp Next ;

4. Составить подпрограмму, выводящую в порт вывода минимальное из тысячи чисел, расположенных в последовательных ячейках ОЗУ. Определить механизм передачи параметров в подпрограмму, привести пример вызова разработанной подпрограммы.

Min1000: mov R1,#255 ; начальный минимум

mov R2,#10 ; инициализация счетчиков

L2: mov R3,#100 ; на 1000 циклов

L3: movx A,@DPTR ; чтение элемента

inc DPTR ; установка указателя на след. элемент

mov R4,A ; временное сохранение элемента

clr c ; сравнение с

subb A,R1 ; минимумов

jnc L1 ; если больше то обработка счетчиков цикла

mov R1,R4 ; если меньше то новый минимум

L1: djnz R3,L3 ; обработка счетчиков цикла

djnz R2,L2

ret

Пример вызова:

mov DPTR,#Massive ; загрузка в указатель адреса начала массива

acall Min1000 ; вызов подпрограммы

5. К МПС подключены магнитный пускатель мощного нагревательного элемента и цифровой восьмиразрядный датчик (выходы типа ТТЛ) температуры со шкалой 0-500 С. Предложить фрагмент принципиальной (функциональной) электрической схемы МПС . Составить программу нагрева скачками по 10 С с фиксацией в каждом положении в течение заданного времени.

Характеристика датчика

Код Температура С

0 0

  1.  500

(255/500)*10=5,1?5 10

mov R1,P1 ; чтение исходной температуры

L2: clr P1.0 ; включить нагреватель

L1: mov A,P1 ; чтение текущей темперетуры

clr c ; вычисление приращения

subb A,R1 ; температуры

cjne A,#5,L1 ; проверка равно ли приращение 10 С

setb P1.0 ; выключение нагревателя

mov R1,P1 ; запоминание текущей точки по температуре acall Delay ; задержка времени

sjmp L2 ; следующий этап нагрева

6. МПС принимает через параллельный порт ввода в квитируемом режиме байты информации. Максимальное из введенных чисел (в дополнительном коде) должно размещаться в одном из регистров общего назначения. Остальные вводимые числа не сохраняются. Предложить фрагмент принципиальной (функциональной) электрической схемы МПС . Составить программу на Ассемблере.

mov R1,#0 ; исходный максимум

Next: clr P1.0 ; установка сигнала готовности

L1: jnb P1.1,L1 ;ожидание синхроимпульса

mov A,P2 ;прием байта

setb P1.0 ; снятие сигнала готовности

L2: jb P1.1,L2 ;ожидание конца синхроимпульса

mov R2,A ; временн. сохранение принятого байта

clr c ; сравнение с

subb A,R1 ; текущем максимумом

jc Next ; это не максимум работаем дальше

mov R1,R2 ; это максимум

sjmp Next ; работаем дальше

7. Составить подпрограмму на Ассемблере, подсчитывающую число ненулевых элементов массива из тысячи чисел, хранящихся в последовательных ячейках ОЗУ. Определить механизм передачи параметров в подпрограмму, привести пример вызова разработанной подпрограммы.

NonZero1000: mov R1,#0 ; обнуление счетчика

mov R3,#0 ; ненулевых элементов

mov R2,#10 ; загрузка счетчиков

L2: mov R3,#100 ; на 1000 элементов

L3: movx A,@DPTR ; чтение элемента массива

Inc dptr ; установка указателя на след. Элемент

jz L1 ; если тек. элемент ноль идти на L1

inc R1 ; инкремент

cjne R1,#0,L1 ; двухбайтового счетчика

inc R3 ; ненулевых элементов

L1: djnz R3,L3 ; обработка счетчиков цикла

djnz R2,L2

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

Пример вызова:

mov DPTR,#Massive ; загрузка в указатель адреса начала массива

acall NonZero1000 ; вызов подпрограммы

8. К порту вывода МПС подключен ЦАП .Предложить фрагмент принципиальной функциональной) электрической схемы МПС . Составить программу генерации на выходе ЦАП сигнала указанной формы с регулируемыми параметрами.

Start: mov P1,#0 ; формирование нулевого состояния участка t2

acall Delay2 ; реализация интервала t2

Next: inc P1 ; формирование очередного шага участка t1

acall Delay1 ; реализация интервала t1

mov A,P1

cjne A,#Amplitude, Next ; проверка на ампл. значения

sjmp Start

9. Составить подпрограмму на Ассемблере, преобразующую 8 - разрядное двоичное число в двоично - десятичный вид , т.е. вычисляющую байты, соответствующие сотням, десяткам и единицам.

BCDConvertor: mov B,#10 ; делим 1-й раз

div AB ; на 10

mov R0,B ; в остатке кол-во единиц в числе

mov B,#10 ; делим 2-й раз

div AB ; на 10

mov R1,B ; в остатке число десятков в числе

mov R2,A ; в частном число сотен в числе

ret ; возврат

Пример вызова:

mov A,#Znach ; загрузка числа

acall NonZero1000 ; вызов подпрограммы

10. Составить подпрограмму на Ассемблере, вычисляющую сумму отрицательных элементов массива из тысячи чисел, хранящегося в последовательных ячейках ОЗУ. Определить механизм передачи параметров в подпрограмму, привести пример вызова разработанной подпрограммы.

SummNegative1000: mov R1,#0 ; обнуление суммы

mov R3,#0 ; отрицаетельных элементов

mov R2,#10 ; загрузка счетчиков

L2: mov R3,#100 ; на 1000 элементов

L3: movx A,@DPTR ; чтение элемента массива

Inc dptr ; установка указателя на след. Элемент

rlc A

jnc L1 ; если тек. >=0 идти на L1

rrc A

add A,R1 ; вычисление

mov R1,A ; двухбайтовой

mov A,#0 ; суммы

addc A,R3 ; отрицательных

mov R3,A ; элементов

L1: djnz R3,L3 ; обработка счетчиков цикла

djnz R2,L2

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

Пример вызова:

mov DPTR,#Massive ; загрузка в указатель адреса начала массива

acall SummNegative1000 ; вызов подпрограммы

11. Составить подпрограмму на Ассемблере, вычисляющую сумму элементов массива из тысячи байт, хранящегося в последовательных ячейках ОЗУ, равных константе, хранящейся в ячейке памяти программ (ПЗУ).

SummEq1000: mov R1,#0 ; обнуление суммы

mov R3,#0 ; равных элементов

mov R2,#10 ; загрузка счетчиков

L2: mov R3,#100 ; на 1000 элементов

L3: movx A,@DPTR ; чтение элемента массива