Программирование микроконтроллера Intel 8050 на языке асемблер

Страницы работы

Содержание работы

Уральский государственный технический университет
кафедра РЭИС

ОТЧЁТ
по лабораторной работе №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 и результаты приведены выше в отчёте. Кроме того проводилось изучение наиболее употребительных директив Ассемблера и их практическое применение в данных примерах.

Похожие материалы

Информация о работе