- •Inc dptr ; установка указателя на след. Элемент
- •Inc dptr ; установка указателя на след. Элемент
- •Inc dptr ; установка указателя на след. Элемент
- •Inc dptr ; установка указателя на след. Элемент
- •Inc dptr ; установка указателя на след. Элемент
- •Inc dptr ; установка указателя на след. Элемент
- •Inc dptr ; установка указателя на след. Элемент
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
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 ; чтение элемента массива