56курсы / 6 курс / 11 семестр / Техника микропроцессорных систем в электросвязи / Teach / SSS / Labs / Labs
.htmlЛабораторный практикум Лабораторная работа №11. Изучение пакета симуляции микроконтроллеров МК51. Сложение многобайтовых чисел.
Цель работы.
Целью работы является обучение студента на примере несложной программы сложения трехбайтовых чисел начальным навыкам отладки программ с помощью пакета симуляции микроконтроллеров МК51. Попутно обучающимся предоставляется повод вспомнить тему представления чисел в средствах вычислительной техники и действия над числами.
Задание на выполнение работы.
2.1. Ознакомиться с принципами сложения многобайтовых чисел в АЛУ микроконтроллера МК51 (см. раздел "Конспект лекций").
2.2. Разработать программу сложения двух трехбайтовых чисел, одно из которых вводится побайтно через линии параллельного порта Р0, а второе - через линии порта Р1. Результат сложения вывести в порт Р2. Ввод и вывод трехбайтовых чисел осуществлять начиная со старшего байта. Текст программы должен быть написан на языке ассемблера микроконтроллеров МК51.
2.3. Подготовить файлы x.ab и y.ab, содержащие исходные данные для работы программы. Для этого следует:
- Записать дату своего рождения в формате ддммггг в виде непрерывной последовательности чисел, где ДД- число, ММ-месяц, ГГГ- последние три цифры года рождения. (Например, 14 февраля 1980 года будет записано как 1402980). Далее интерпретировать записанную последовательность цифр как десятичное целое число Х.
- Перевести число Х в шестнадцатиричную систему счисления и представить в виде трехбайтового (шестизначного шестнадцатиричного) числа.
- В соответствии с разделом "Подготовка файлов исходных данных" Инструкции по отладке программ с помощью пакета симуляции микроконтроллеров МК51 записать число Х в файл x.ab.
- Провести аналогичные операции с номером зачетной книжки. Интерпретируя этот номер как число, обратное числу Y (минус Y), сформировать из числа Y (отрицательного !) файл y.ab.
В файлах x.ab и y.ab первыми байтами должны быть старшие байты чисел X и Y соответственно.
Порядок выполнения работы.
3.1. Включить компьютер и загрузить в него редактор текстов.
3.2. В редакторе текстов ввести текст программы в соответствии с правилами записи на языке ассемблера микроконтроллеров МК51.
3.3. Выполнить основные шаги отладки программы - трансляцию и линковку; при наличии ошибок внести соответствующие исправления.
3.4. Загрузить симулятор микроконтроллера МК51 (с автоматической загрузкой .hex - модуля отлаживаемой программы).
3.5. Подключить к параллельному порту Р0 файл x.ab, к параллельному порту Р1 файл y.ab, а к порту Р2 - файл z.ab (в него будет записан результат сложения).
3.6. Выполнить пошаговую симуляцию работы программы.
3.7. Проанализировать результат, записанный в файл z.ab, для чего перевести его в десятичную систему счисления и убедиться, что полученное таким образом число равно разности числа Х и номера зачетной книжки.
3.8. Файл с листингом трансляции программы (с расширением .prn), карту распределения памяти (с расширением .map), а также файлы x.ab, y.ab и z.ab представить на проверку.
Лабораторная работа №12. Знаковое умножение.
Цель работы.
Целью работы является обучение правилам разработки прикладных программ для микроконтроллеров МК51.
Задание на выполнение работы.
Работа состоит из двух частей. Первая часть работы заключается во вводе в компьютер и отладке прилагаемой программы знакового умножения однобайтовых чисел, а также выполнение с ее помощью примеров умножения чисел.
Вторая часть работы предполагает самостоятельную разработку и отладку
программы знакового умножения двухбайтовых чисел по аналогии с программой знакового умножения однобайтовых чисел с использованием навыков разработки программ сложения многобайтовых чисел, полученных при выполнении лабораторной работы №11.
Часть 1. 2.1. Ввести в редактор текстов, оттранслировать и отлинковать прилагаемую программу umn.asm знакового умножения однобайтовых чисел.
2.2. Выбрать 2 разных числа X и Y в диапазоне от 4 до 127.
2.3. Загрузить симулятор микроконтроллера МК51 (с автоматической загрузкой .hex - модуля отлаживаемой программы). Занося поочередно сомножители в ячейки памяти с адресами 30Н (первый сомножитель) и 31Н (второй сомножитель) контролировать правильность вычисления программой произведений.
X*Y
(-X)*Y
X*(-Y)
(-X)*(-Y)
Произведение заносится в ячейки памяти с адресом 32Н (старший байт) и 33Н (младший байт).
Часть 2. 2.4. Разработать, ввести и отладить программу знакового умножения двух двухбайтовых чисел. Первый сомножитель вводить побайтно через линии параллельного порта Р0, начиная со старшего байта. Второй сомножитель - аналогично - через линии порта Р1. Результат умножения вывести в порт Р2, начиная со старшего байта.
2.5. Подготовить файлы v.ab и u.ab, содержащие сомножители исходные данные для работы программы. Для этого следует:
- Записать дату своего рождения в формате ДДММГ в виде непрерывной последовательности чисел, где ДД- число, ММ-месяц, Г- последняя цифра года рождения. Далее интерпретировать записанную последовательность цифр как десятичное целое число V.
- Перевести число V в шестнадцатиричную систему счисления и представить в виде двухбайтового (четырехзначного шестнадцатиричного) числа.
- В соответствии с "Инструкцией по отладке программ с помощью пакета симуляции микроконтроллеров МК51" записать число V в файл v.ab начиная со старшего байта.
- Аналогичным образом записать число –V (минус V) в файл mv.ab.
Провести аналогичные операции с 4-мя последними цифрами номера зачетной книжки, сформировав файлы u.ab и mu.ab соответственно.
Порядок выполнения работы.
3.1. Включить компьютер и загрузить в него редактор текстов.
3.2. В редакторе текстов ввести текст программы в соответствии с правилами записи на языке ассемблера микроконтроллеров МК51.
3.3. Выполнить основные шаги отладки программы - трансляцию и линковку; при наличии ошибок внести соответствующие исправления.
3.4. Загрузить симулятор микроконтроллера МК51 (с автоматической загрузкой .hex - модуля отлаживаемой программы).
3.5. Подключить к параллельному порту Р0 файл v.ab, к параллельному порту Р1 файл u.ab, а к порту Р2 - файл m1.ab (в него будет записан результат умножения).
3.6. Выполнить пошаговую симуляцию работы программы.
3.7. Подключить к параллельному порту Р0 файл mv.ab, к параллельному порту Р1 файл u.ab, а к порту Р2 - файл m2.ab (в него будет записан результат умножения).
3.8. Выполнить пошаговую симуляцию работы программы.
3.9. Подключить к параллельному порту Р0 файл v.ab, к параллельному порту Р1 файл mu.ab, а к порту Р2 - файл m3.ab (в него будет записан результат умножения).
3.10. Выполнить пошаговую симуляцию работы программы.
3.11. Подключить к параллельному порту Р0 файл mv.ab, к параллельному порту Р1 файл mu.ab, а к порту Р2 - файл m4.ab (в него будет записан результат умножения).
3.12. Выполнить пошаговую симуляцию работы программы.
3.13. Проанализировать правильность выполненных произведений (файлы m1.ab, m2.ab, m3.ab, m4.ab).
3.14. Файл с листингом трансляции программы (с расширением .prn), карту распределения памяти (с расширением .map), а также файлы v.ab, u.ab
mv.ab, mu.ab, m1.ab, m2.ab, m3.ab, m4.ab представить на проверку.
Методические указания к выполнению работы. Известно, что произведение двух N - разрядных целых чисел без знака занимает 2N разрядов. В системе команд микроконтроллера МК51 предусмотрена возможность вычисления такого произведения с помощью команды MUL AB. По этой команде содержимое аккумулятора в формате целого числа без знака умножается на содержимое регистра В в аналогичном формате, и произведение записывается по месту сомножителей - старший байт - в регистр В, а младший - в аккумулятор. Произведение также интерпретируется как целое число без знака.
При вычислении произведения чисел, представленных в формате со знаком, естественно вычислить модули сомножителей с помощью команды MUL AB, а знак произведения обрабатывать отдельно. Блок - схема алгоритма знакового умножения при этом примет вид рис. Л11-1.
Изменение знака числа, как известно, осуществляется инверсией всех разрядов числа и прибавлением единицы младшего разряда к проинвертированному таким образом числу. Инверсия всех разрядов числа может быть осуществлена в аккумуляторе командой CPL A, а прибавление единицы - командой INC A.
Переход по положительному знаку числа, записанного в аккумулятор, осуществляется командой JNB ACC 7.
Знак произведения вычисляется с помощью операции "Исключающее или" над операндами; при этом содержимое старшего разряда результата операции будет соответствовать знаку произведения. Функция "исключающая или" над знаковым разрядом операндов даст следующий результат:
0 XRL 0 = 0
1 XRL 0 = 1
0 XRL 1 = 1
1 XRL 1 = 0
С учетом изложенных моментов программа знакового умножения восьмиразрядных чисел может приобрести следующий вид:
;###################################################################
;# #
;# Программа знакового умножения однобайтовых чисел #
;# #
;# множимое должно быть записано в ячейку с адресом 30Н #
;# множитель - в ячейку ОЗУд с адресом 31Н #
;# #
;# старший байт произведения записывается в ячейку 32Н #
;# младший - в ячейку 33Н #
;# #
;#################################################################
defseg qq, absolute
seg qq
org 0
;
; НАЧАЛО
;
mov a,30h ; вычисление модуля множимого
jnb acc.7, pol1 ; если множимое отрицательно,
cpl a ; изменить его знак
inc a ;
pol1: mov b,a ;
;
;
;
mov a,31h ; вычисление модуля множителя
jnb acc.7, pol2 ; если множитель отрицателен,
cpl a ; изменить его знак
inc a ;
; умножение модулей
pol2: mul ab ;
;
; предварительное сохранение результата
;
mov 33h,a ;
mov 32h,b ;
;
; вычисление знака произведения
;
mov a,30h ; знак произведения вычисляется
xrl a,31h ; как функция "исключающее или"
jnb acc.7,otr ; над содержимим знаковых разрядов
; сомножителей
;
;
mov a,33h ; если знак произведения отрицателен,
cpl a ; полученный результат умножения
add a,#1 ; модулей следует превратить в
mov 33h,a ; отрицательный путем инверсии
; всех 16-ти разрядов и увеличения
mov a,32h ; на 1 проинвертированного
cpl a ; шестнадцатиразрядного числа
addc a,#0 ;
mov 32h,a ;
otr: nop ;
;
;
end
При разработке программы знакового умножения двухбайтовых чисел следует иметь в виду, что произведение будет занимать четыре байта и формироваться суммированием частных произведений по правилам, аналогичным ручному умножению "в столбик". Если пронумеровать байты общего вычисляемого произведения с 0 -го (младший) по 3 -й (старший), то наиболее рационально первым вычислять частное произведение младших байтов двух сомножителей, которое следует разместить в 0-м и 1-м байтах общего произведения. Затем следует вычислить частное произведение старших байтов двух сомножителей, которое необходимо разместить во 2-м и 3-м байтах общего произведения. Далее вычисляются два промежуточных частных произведений - младшего байта одного сомножителя на старший другого, которые должны складываться с учетом переноса с 1-м и 2-м байтами общего произведения с распространением переноса в 3-й байт.