Уральский государственный технический университет
кафедра РЭИС
ОТЧЁТ
по лабораторной работе №3
”Программирование микроконтроллера Intel 8050 на языке
асемблер”
Выполнил
студент группы
Р—36042
Устьянцев К.Ю.
Преподаватель Добряк В.А.
Екатеринбург
2009г
Цели и задачи:
Целью данной лабораторной работы является изучение основ языка ассемблера микроконтроллеров семейства Intel 8051 (в работе изучается наш аналог - микроконтроллер КМ1816ВЕ51), а также продолжение изучения интегрированной среды ProView фирмы Franklin Software Inc.
Необходимо выполнить несколько заданий, иллюстрирующих основные правила программирования на языке ассемблера и наиболее употребительные директивы.
Исходные тексты и объектный код программ
В данной части работы необходимо отладить подготовленную при выполнении домашнего задания подпрограмму вычисления скалярного произведения и программу вычисления среднего арифметического X элементов массива {Xi}:. Запись элементов {Xi}: в память данных.
В данном коде я объединил оба задания лабораторной работы. За основную программу я взял задание вычисления среднего арифметического, а за подпрограмму скалярное произведение векторов. Код дополнен директивами, как и требовалось в задании.
Скалярное произведение вычислялось по формуле , где X и Y равны: Х{10110010}, Y{10001001}
Среднее арифметическое элементов массива вычислялось по формуле: , где N=7.
SEG1 SEGMENT CODE ;объявляем перемещаемый сегмент
RSEG SEG1 ;выбор сегмента
START: JMP LOAD
ORG 30H
LOAD: FIRST DATA 40H
EIGHTH DATA 50H
MOV R0,#FIRST ;записываем в регистр адрес первого ;элемента массива
MOV R1,#EIGHTH ;записываем в регистр адрес восьмого элемента массива
MOV R2,#00H ;обнуляем счётчик циклов заполнения ;массива
MOV A,#02H ;устанавливаем первое число массива
CALL SCALL ;вызов подпрограммы
BUM: MOV @R0,A ;заполняем ячейку (1-7) массива
INC A ;генерируем следующее число массива
MOV @R1,A ;заполняем ячейку (8-14) массива
INC A ;генерируем следующее число массива
INC A ;генерируем следующее число массива
INC R0 ;передвигаем адрес на следующую ячейку
INC R1 ;передвигаем адрес на следующую ячейку
INC R2 ;переключаем счётчик цаклов
CJNE R2,#07H,BUM ;проверяем все ли циклы прошли
MOV R0,#FIRST ;записываем в регистр адрес первого ;элемента массива
MOV R1,#EIGHTH ;записываем в регистр адрес восьмого ;элемента массива
MOV R2,#00H ;обнуляем счётчик циклов заполнения ;массива
MOV A,@R0 ;устанавливаем первое слагаемое
ADDD: INC R0 ;сдвигаем адрес ячейки
ADD A,@R0 ;суммируем слогаемые
ADD A,@R1 ;суммируем слогаемые
INC R1 ;сдвигаем адрес ячейки
INC R2 ;переключаем счётчик цаклов
CJNE R2,#07H,ADDD ;проверяем все ли циклы прошли
MOV B,14H ;записываем число слогаемых
DIV AB ;вычисляем среднее арифметическое
RESULTAT EQU R7 ;задаём символическое имя регистру R7
MOV R7 , A
DW2: DW 0 ;инициализируем память программ
STOP: JMP STOP ;бесконечный цикл
SCALL: PUSH ACC ;сохранение А
PUSH PSW ;сохранение PSW
MOV 0030H,#10110010B ;загружаем первый операнд
MOV 0031H,#10001001B ;загружаем второй операнд
SETB RS1 ;выбор 3 банка регистров
RESULT SET R7 ;"обзываем" R7
MOV R7 , # 00H ;обнуляем регистр результата
X DATA 0030H ;"обзываем" ячейку памяти
Y DATA 0031H ;"обзываем" ячейку памяти
MOV A,X ;запись в аккумулятор первого операнда
ANL A,Y ;логическое "И" двух операндов
CLR C ;сброс переноса
GO: RRC A ;вытесняем один разряд
JNC NOO ;переход, если перенос=0
INC R7
NOO: CJNE A,#00H,GO ;проверяем, все ли биты вытеснены
DW1: DW 0 ;инициализируем память программ
POP PSW ;извлечение регистра PSW
POP ACC ;извлечение аккумулятора
CLR RS1 ;переключаемся на 0 банк
RET ;возврат из подпрограммы
END
В результате скалярного произведения векторов результат записывается в регистр R7 третьего блока регистров, результат равен 01H.
Результат вычисления среднего арифметического равен А1Н.
Выводы:
В ходе выполнения данной лабораторной работы было продолжено изучение микроконтроллера семейства Intel 8051 (нашего аналога КМ1816ВЕ51): изучались основы языка ассемблера, а также было продолжено изучения интегрированной среды ProView фирмы Franklin Software Inc.
При выполнении работы проводилось исследование и отладка двух программ:
· скалярного произведения двух двоичных векторов размерности 8;
· программа вычисления среднего арифметического X элементов массива {Xi}:.
Примеры были отлажены в среде ProView и результаты приведены выше в отчёте. Кроме того проводилось изучение наиболее употребительных директив Ассемблера и их практическое применение в данных примерах.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.