Скачиваний:
29
Добавлен:
27.04.2015
Размер:
14.87 Кб
Скачать

Лабораторный практикум Лабораторная работа №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-й байт.

 

 

Соседние файлы в папке Labs