Индивидуальное задание №2
РАЗРАБОТКА И ОТЛАДКА ПРИКЛАДНОЙ ПРОГРАММЫ
НА ЯЗЫКЕ АССЕМБЛЕРА МК51
Итогом выполнения задания является
листинг прикладной программы на языке ассемблера с подробным комментарием и
результаты ее тестирования с помощью эмулятора при фиксированных значениях операндов.
Используйте опыт, полученный в ходе выполнения лабораторных работ.
- Разработать программу, сортирующую числа массива ячеек РПД микроконтроллера
МК51 (с 32 по 127 ячейки) в порядке их убывания.
- Карта опроса 64 датчиков (битовая информация) записана в ячейки 20Н-27Н РПД
микроконтроллера К1830ВЕ51. Должны замигать светодиоды, подключенные к порту
вывода Р1, если число датчиков с нулевым уровнем превышает 15.
- Разработать программу, формирующую на выводе Р3.7 пачку из 10 импульсов,
следующих с частотой 10 кГц.
- На светодиодах, подключенных к порту Р1, получить световой эффект бегущего
огонька со сменой направления. Скорость эффекта должна регулироваться тумблерами,
подключенными к порту Р2 микроконтроллера МК51.
- Карта опроса 64 датчиков (битовая информация) записана в ячейки 20Н-27Н РПД
микроконтроллера К1830ВЕ51. При срабатывании датчика (нулевой уровень), его
номер необходимо вывести в порт Р1 в двоично-десятичном коде.
- Реализовать на микроконтроллере МК51 программу, фиксирующую в регистре DPTR
наибольшее число из массива двухбайтовых чисел без знака (20Н-3FН).
- Если на тумблерах порта ввода Р1 микроконтроллера К1830ВЕ51 набрано четное
число, на светодиодах порта вывода Р2 должен наблюдаться эффект бегущего огонька,
а если нечетное - бегущей тени.
- Отрицательные числа массива однобайтовых чисел со знаком в дополнительном
коде 20Н-27Н РПД микроконтроллера семейства МК51 переписать в предварительно
обнуленный массив 28Н-2FH.
- Записать в массив В памяти данных микроконтроллера МК51 двоично-десятичный
код двоичных чисел массива А, больших числа, набранного на тумблерах порта
Р1 в двоично-десятичном коде.
- Светодиоды, подключенные к порту Р1 микроконтроллера МК51, должны мигнуть
число раз, набранное в двоично-десятичном коде на тумблерах, подключенных
к порту Р2, через одну секунду каждый.
- Произведение двоично-десятичных чисел с портов Р0 и Р1 микроконтроллера
МК51 вывести в порты Р2 и Р3 в двоично-десятичном коде.
- Разработать программу, фиксирующую в ячейке 28Н РПД микроконтроллера МК51
наибольшее положительное число из массива однобайтовых чисел со знаком (30Н-3FН),
представленных в дополнительном коде.
- Карта опроса 128 датчиков (битовая информация) записана в ячейки 20Н-2FН РПД
микроконтроллера К1830ВЕ51. Определить число датчиков с нулевым уровнем и
записать в расширитель аккумулятора В.
- Разработать программу умножения четырехбайтового двоичного числа на однобайтовое
для микроконтроллера К1830ВЕ51.
- Должны замигать светодиоды порта вывода Р1 микроконтроллера К1830ВЕ51, если
контрольная сумма массива ячеек РПД с 20Н по 27Н не совпадает с контрольной
суммой массива ячеек с 28Н по 2FH.
- Реализовать на микроконтроллере МК51 программу, фиксирующую в регистре В количество
слов массива текстовой информации (20Н-7FН).
- Реализовать программу, фиксирующую в регистре DPTR наименьшее число (и его
адрес) массива однобайтовых чисел (20Н-3FН) РПД.
- Реализовать программу, фиксирующую в регистре DPTR наибольшее положительное
число (и его адрес) из массива однобайтовых чисел со знаком (20Н-3FН), представленных
в прямом коде.
- На светодиодах, подключенных к порту Р2, реализовать световой эффект бегущей
тени со сменой направления. Скорость эффекта должна регулироваться программным
переключателем, подключенным к порту ввода Р1 микроконтроллера К1830ВЕ51.
- Карта опроса 128 датчиков (битовая информация) записана в ячейки 20Н-2FН РПД
микроконтроллера К1830ВЕ51. При срабатывании датчика (нулевой уровень) его
номер необходимо вывести в регистр DPTR в двоично-десятичном коде.
- Разработать программу, формирующую на выводе Р3.6 пачку из 20 импульсов, следующих
с частотой 100 кГц.
- Если на тумблерах порта ввода Р1 микроконтроллера К1830ВЕ51 набрано четное
число, на светодиодах порта вывода Р2 должен наблюдаться эффект бегущего огонька,
а если нечетное - елочки.
- Записать в массив В памяти данных микроконтроллера МК51 двоично-десятичный
код двоичных чисел массива А, меньших числа, набранного на тумблерах порта
Р1 в двоично-десятичном коде.
- Среднее арифметическое значение элементов массива 20Н-27Н РПД микроконтроллера
семейства МК51 вывести в порт Р1.
- Светодиоды, подключенные к порту Р2 микроконтроллера К1816ВЕ51 должны мигнуть
число раз, набранное в двоично-десятичном коде на тумблерах, подключенных
к порту Р1, через 2 секунды каждый.
- В регистре DPTR сформировать в двоично-десятичном коде произведение двоично-десятичных
чисел с портов Р0 и Р1 микроконтроллера К1816ВЕ51.
- Карта опроса 16 датчиков (массив однобайтовых чисел без знака) записана в
ОЗУ МП серии МК51 начиная с ячейки 20H. Начиная с ячейки 30Н сформировать
копию массива, изменив порядок следования чисел на обратный, а минимальное
значение вывести в порт Р1.
- Разработать программу, формирующую на выводе Р3.7 импульсы длительностью 100
мкс, следующие с частотой 1 кГц.
- Сформировать на линии Р1.3 последовательность импульсных сигналов с частотой
ноты СИ первой октавы (длительность полупериода 1012 мкс).
- Если на тумблерах порта ввода Р1 микроконтроллера К1830ВЕ51 набрано число,
меньшее 20Н, на светодиодах порта вывода Р2 должен наблюдаться эффект бегущего
огонька, а если большее - бегущей тени. Если число равно 20Н, светодиоды должны
потухнуть.
- Двухбайтовые двоично-десятичные числа массива 20Н-27Н РПД преобразовать в
двухбайтовые двоичные и записать в массив 28Н-2FН.
- Двухбайтовые двоичные числа массива 20Н-27Н РПД преобразовать в двухбайтовые
двоично-десятичные. Числа массива меньше 10000.
- Числа массива 20Н-27Н РПД микроконтроллера семейства МК51, отличные от двоично-десятичных,
переписать в предварительно обнуленный массив 28Н-2FH.
- В ячейках 30Н-37Н сформировать массив, каждый элемент которого определяется
как сумма однобайтовых чисел массивов 20Н-27Н и 28Н-2FH, представленных в
двоично-десятичном коде. Если сумма равна или превышает 100, в ячейку писать
99Н.
- Отсортировать числа массива 20Н-27Н РПД микроконтроллера К1816ВЕ51 в порядке
нарастания.
- В массиве 20Н-3FН РПД микроконтроллера МК51 подготовлены для передачи семиразрядные
сообщения. Добавить в качестве восьмого разряда каждого байта бит контроля
четности. Наибольшее число продублировать в регистре В.
- Записать в регистр DPTR произведение наибольших чисел массивов 20Н-27Н и 28Н-2FH.
- Разработать программу умножения трехбайтового двоичного числа на однобайтовое
для микроконтроллера К1830ВЕ51.
- Сформировать на линии Р1.5 последовательность импульсных сигналов с частотой
ноты СОЛЬ второй октавы (длительность полупериода 638 мкс).
- Карта опроса 128 датчиков (битовая информация) записана в ячейки 20Н-2FН
РПД микроконтроллера К1830ВЕ51. Должны замигать светодиоды, подключенные к
порту вывода Р1, если число датчиков с единичным уровнем превышает 25.
- Карта опроса 128 датчиков (битовая информация) записана в ячейки 20Н-2FН РПД
микроконтроллера К1830ВЕ51. Должен замигать светодиод, подключенный к линии
Р1.1, если число датчиков с нулевым уровнем превышает число датчиков с единичным
уровнем.
- Скопировать массив 20Н-27Н в массив 28Н-2FH, преобразовав двоично-десятичные
числа в двоичные. Наибольшее число записать в регистр В.
- Числа со знаком, записанные в ячейках РПД 20Н-27Н в дополнительном коде, преобразовать
в прямой код и разместить массив в области 28Н-2FH.
- Записать в регистр DPTR сумму наибольших чисел массивов 20Н-27Н и 28Н-2FH
двоично-десятичных чисел.
- Разработать программу, сортирующую двоично-десятичные числа массива 20H-3FH
РПД микроконтроллера МК51 в порядке их убывания. Наибольшее число продублировать
в регистре В.
ПРИМЕР ВЫПОЛНЕНИЯ ИНДИВИДУАЛЬНОГО
ЗАДАНИЯ №2
Задание. Подсчитать количество
символов в первом предложении текста, размещенного в РПД начиная с ячейки 20Н
(включая пробелы). Результат сформировать в регистре R7 в двоично-десятичном
коде.
Решение. Ниже приведен текст
программы на языке ассемблера с подробным комментарием:
|
MOV |
R0,#20H |
; начало массива |
|
CLR |
A |
; очистка счетчика |
M1: |
CJNE |
@R0,#’.’,M2 |
; сравнение с кодом точки 2ЕН |
|
SJMP |
EXIT |
; закончить обработку массива |
M2: |
INC |
R0 |
; наращивание указателя памяти |
|
ADD |
A,#1 |
; двоично–десятичный |
|
DA |
A |
; счетчик в аккумуляторе |
|
SJMP |
M1 |
; организация цикла |
EXIT |
MOV |
R7,A |
; результат в R7 |
Используется косвенная адресация элементов массива. Двоично-десятичный счетчик числа символов организован в аккумуляторе с использованием команды десятичной коррекции.
После ассемблирования программы сформирован файл листинга прикладной программы massiv.lst, приведенный ниже. Защита работы проводится на эмуляторе микроконтроллера путем прогона программы после предварительного заполнения массива кодами символов.
############################################################################## |
# |
# |
# Micro Series 8051 Assembler V1.80/MD2
|
11/Oct/06 11:21:50 # |
# |
# |
# Source = massiv.asm |
# |
# List = massiv.lst |
# |
# Object = massiv.r03 |
# |
# Options = |
# |
# |
# |
# |
(c) Copyright IAR Systems 1985 # |
############################################################################## |
1 |
0000 |
7820 |
|
mov |
r0,#20H |
2 |
0002 |
E4 |
|
clr |
a |
3 |
0003 |
B62E02 |
m1: |
cjne |
@r0,#'.',m2 |
4 |
0006 |
8006 |
|
sjmp |
exit |
5 |
0008 |
08 |
m2: |
inc |
r0 |
6 |
0009 |
2401 |
|
add |
a,#1 |
7 |
000B |
D4 |
|
da |
a |
8 |
000C |
80F5 |
|
sjmp |
m1 |
9 |
000E |
FF |
exit: |
mov |
r7,a |
10 |
000F |
|
|
end |
|
Errors: |
None |
########## |
Bytes: |
15 |
# massiv # |
CRC: |
F3A2 |
########## |