Изучение структурной организации и системы команд микроконтроллеров семейства МК51

  • Вид работы:
    Практическое задание
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    25,6 Кб
  • Опубликовано:
    2014-08-04
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Изучение структурной организации и системы команд микроконтроллеров семейства МК51













Лабораторная работа №1

Микропроцессорные системы

"Изучение структурной организации и системы команд микроконтроллеров семейства МК51"


Выполнил

Черкасов А.О.






Москва - 2012г.

Задание

Найти наибольший элемент массива, расположенного во внутренней памяти, и сохранить его значение в стеке.

Используемые регистры и ячейки памяти

Регистр или ячейка памяти

Назначение

R0 (0000h)

Адрес текущего элемента массива. В начальный момент содержит адрес начала массива - 0010h.

R1 (0001h)

Количество элементов массива. Счетчик итераций.

R2 (0002h)

Регистр для временного хранения данных (элемента массива, с которым в данной итерации ведется работа).

0008h

Наибольший элемент массива данных, записанный в стек после завершения работы программы.

0010h-0013h

Данные.


Алгоритм решения задачи- адрес начального элемента массива- количество элементов…dm - элементы массива


Описание используемых команд

MOVRn, #data

n = 0-7

Запись в регистр Rn данных #data.

MOV ad, #data

Запись по адресу ad данных #data.

MOVA, @Rn

n = 0-1

Запись из внутренней памяти данных (ВПД) в аккумулятор данных, расположенных по адресу, который содержится в регистре Rn.

INC Rn

n = 0-7

Прибавление единицы к данным, записанным на регистре Rn.

DEC Rn

n = 0-7

Вычитание единицы из данных, записанных на регистре Rn.

XCH A, ad

Обмен данными между аккумулятором и адресом ad.

JZ rel

Переход по адресу или метке rel, если на аккумуляторе ноль.

MOV ad, @Rn

n = 0-7

Запись по прямому адресу данных из ВПД, адрес которых записан в регистре Rn.

SUBB A, ad

Вычитание с заемом из аккумулятора значения, записанного в ВПД по адресу ad.

JBC bit, rel

Переход по адресу или метке rel, если установлен бит bit, с очисткой этого бита.

SJMP rel

массив память программа стек

Безусловный переход по метке rel.

PUSH ad

Запись в стек значения, записанного по адресу ad.

Код программы

; //--------------------------------------------------------------//

; // Описание : Lab. Work (ASM Version) //

; // Copyright : MIREA, 1998 - 2000 //

; // Процессор : МК 51 //

; // Версия : 1.0 //

; // Ассемблер : A51 v. 6.02 //

; // Дата : XX.XX.2001 //

; // Комментарии : Файл-заготовка //

; //-------------------------------------------------------------//

; --- Заголовок программы. Не изменяйте его !!! ----

NAME LAB_DEMO

USING 0 ; Использовать банк регистров 0

Jmp Start ; Начало программы

ORG 03h

LJmp Ext0Srv ; Адрес обработчика EXT INT 0

LJmp Time0Srv ;

ORG 13H ; Адрес обработчика EXT INT 1

LJmp Ext1Srv ;

ORG 1BH ; Адрес обработчика TIMER INT 1

LJmp Time1Srv ;

ORG 23H ; Адрес обработчика прерывания от

LJmp RiTiSrv ; последовательного порта

; --- Конец заголовка ----

;---------- Здесь вводите код программы ----------

;---------- Инициализация------------------------------

Start:MOV R0, #0010h; Начальный адрес массива

MOV R1, #0004h; Кол-во эл-тов

;---------- Данные----------------------------------------0010h, #0Ah0011h, #0Bh0012h, #07h0013h, #0Fh

;---------- Конец данных-------------------------------

MOV A, @R0; Первый (эталонный) эл-т - на аккумуляторе

;---------- Конец инициализации--------------------

;---------- Главный цикл-------------------------------

Loop:INC R0; Следующий адрес эл-та

DEC R1; Декремент кол-ва эл-тов

XCH A, 0001h; Обмен аккумулятора и R1 (эталонный эл-т на R1)

JZ EndLoop; Если на аккумуляторе ноль (эл-ты массива кончились) - конец программы

XCH A, 0001h; Обмен аккумулятора и R1 (эталонный эл-т на A)

MOV 0002h, @R0; Запись в R2 след. эл-та, адрес которого на R0

XCH A, 0002h; Обмен аккумулятора и R2 (эталонный эл-т на R2)

SUBB A, 0002h; Вычитание из следующего элемента эталонного

XCH A, 0002h; Обмен аккумулятора и R2 (эталонный эл-т на A)

JBC cy, Loop; Если есть перенос (эл-т меньше эталонного) - переходим к следующему элементу

MOV A, @R0; Иначе - записываем значение в аккумулятор

sjmp Loop; Переходим к след. эл-ту

EndLoop:PUSH 0001h; Запись результата в стек

sjmp EndlessLoop

EndlessLoop:sjmp EndlessLoop; Бесконечный цикл

;---------- Конец главного цикла-------------------

;---------- Конец программы------------------------

; Обработчики прерываний.

Ext1Srv: RETI

Time0Srv: RETI

Time1Srv: RETI: RETISrv: RETI: RETI

Похожие работы на - Изучение структурной организации и системы команд микроконтроллеров семейства МК51

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!