Добавил:
Кафедра ВТ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
2
Добавлен:
07.04.2023
Размер:
255.14 Кб
Скачать

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

Изучение кросс-средств разработки программного обеспечения для однокристального микроконтроллера MCS51

Цель работы:

1.Получение навыков работы с кросс-средствами разработки программного обеспечения для однокристального микроконтроллера (ОМК) MCS51.

2.Ознакомление с системой команд ОМК MCS51.

3.Получение навыков программирования для ОМК MCS51

Задания на лабораторную работу:

  1. Подготовить программу на языке ассемблера, выполняющую пересылку массива констант (8 чисел) из внешней памяти программ (ВПП) в резидентную память данных (РПД) по адресам 20h - 27h. В программе необходимо предусмотреть инициализацию указанной области ВПП константами с помощью директивы DB.

Считывание данных из ВПП в цикле реализуется парой команд:

MOV A,#0

MOVC A,@A+DPTR

При этом двухбайтовый регистр-указатель DPTR в начале программы должен быть инициализирован командой MOV DPTR,#addr (addr - адрес первой константы), а затем инкрементироваться при каждом проходе цикла (INC DPTR). Пересылку значений в ячейки РПД целесообразно выполнять в цикле командой MOV @R1,A. Предварительно регистр R1 должен инициализироваться константой 20h (MOV R1,#20h), а затем инкрементироваться при каждом проходе цикла (INC R1).

Кроме того, для подсчета числа пересылок необходим счетчик цикла (например, регистр R0). Для организации цикла удобно использовать команду DJNZ R0, M1 , которая декрементирует содержимое R0 и в случае его неравенства нулю передает управление на метку M1 (начало цикла).

  1. Подготовить программу, копирующую в ячейки РПД с адресами 18h-1Dh(регистровый банк 3) содержимое следующих регистров специальных функций в указанной последовательности: DPH, DPL,TH0, TL0, TH1, TL1. Для выполнения пересылок использовать команду MOV @R0,ad, где ad - адрес источника, который необходимо определить по таблице 1.2. Регистр R0, используемый для косвенной адресации загружаемых ячеек РПД должен относится к первому регистровому банку.

  2. Подготовить программу для обработки измерительной информации. Исходные данные хранятся во внешней памяти данных в виде массива (10 чисел). Необходимо найти среднее значение Xср, сравнить его с уставками - двумя константами Qmax и Qmin, хранящимися также во внешней памяти данных. По результатам сравнения сформировать признак p и вывести его на линии порта P1:

Xср >= Qmax, p=11;

Qmax > Xср > Qmin, p=10;

Xср <= Qmin, p=00;

Порядок выполнения работы

  1. Подготовить с помощью кросс-средств программы, составленные в соответствии с предыдущим разделом.

  2. С помощью кросс-отладчика проверить правильность работы этих программ, записав предварительно исходные данные в заданные разделы памяти, определить время выполнения программ. Продемонстрировать работу программ преподавателю.

Общий алгоритм подготовки программного обеспечения:

Для подготовки исходного текста программы на входном языке, может использоваться любой редактор, формирующий текстовый файл в коде ASCII. В настоящем цикле лабораторных работ в целях глубокого изучения архитектуры ОМК в качестве входного языка используется язык ассемблера. Для трансляции исходного текста программы в объектный код в данном цикле лабораторных работ используется ассемблер ASM51. На этапе трансляции выявляются и должны быть исправлены синтаксические ошибки в исходном тексте. При разработке достаточно сложных многомодульных программ используется также редактор связей (линкер), который позволяет включать в исполняемую программу независимо разработанные и библиотечные модули.

Часть 1.2

ASM:

$mod52

ORG 0h;Начало программы: от 0h - только если нет обработки других прерываний

M1:

MOV DPTR, #init;Устанавливаем указатель DPTR на начало данных

MOV R0, #8 ;Количество повторений цикла

MOV R1, #20h;Начальный адрес таблицы данных в DSEG

LOOP:

MOV A, #0

MOVC A, @A+DPTR ;Чтение данных из CSEG по адресу (A)+(DPTR)

MOV @R1, A ;Запись данных в таблицу DSEG по адресу (R1)

INC DPTR

INC R1

DJNZ R0,LOOP ;Декримент R0, если не ноль то переход на LOOP

ORG 1000h

init:

DB 1,2,3,4,5,6,7,8; Таблица данных во внешней памяти

END

Часть 1.3

ASM:

$mod52

ORG 0h;Начало программы: от 0h - только если нет обработки других прерываний

M1:

MOV DPH, #1

MOV DPL, #2

MOV TH0, #3

MOV TL0, #4

MOV TH1, #5

MOV TL1, #6

SETB RS0

MOV R0,#18h

MOV @R0,DPH

INC R0

MOV @R0,DPL

INC R0

MOV @R0,8Ch

INC R0

MOV @R0,8Ah

INC R0

MOV @R0,8Dh

INC R0

MOV @R0,8Bh

SETB RS1

end

Часть 1.4

ASM:

$mod52

START:

ORG 0h

MOV DPTR,#init;Устанавливаем указатель DPTR на начало данных

MOV R0, #10 ;Количество повторений цикла

MOV R1, #20h ;Начальный адрес таблицы данных в DSEG

LOOP:

MOV A,#0

MOVC A,@A+DPTR;Чтение данных из CSEG по адресу (A)+(DPTR)

MOV @R1,A;заносим содержимое в регистровый банк R1

INC DPTR

INC R1

DJNZ R0,LOOP;Декримент R0, если не ноль то переход на LOOP

;вычисляем вреднее арифметическое

MOV R2,#0 ;текущее среднее значение

MOV R4,#0 ;накопитель остатка от деления

MOV R6,#0 ;накопитель остатка от деления

MOV B, #1

MOV R0,#10 ;Количество повторений цикла

MOV R1,#20h ;Начальный адрес таблицы данных в DSEG

;old=old+(x(n)-old)/n

LOOP1:

MOV A,@R1

SUBB A,R2

JC NEGATIVE

JMP POZITIVE

NEGATIVE:

CLR C

MOV A,R2

MOV R3,B

MOV B,@R1

SUBB A,B

MOV B,R3

MOV R3,B

DIV AB

MOV R7,A

MOV A,R6

ADD A,B

MOV R6,A

MOV B,#100

SUBB A,B

JC NEGATIVE3

JMP POZITIVE3

NEGATIVE3:

CLR C

MOV A,R7

JMP FINAL3

POZITIVE3:

MOV R6,A

MOV A,R7

MOV B,R2

DEC B

MOV R2,B

FINAL3:

MOV B,R3

MOV R3,A

MOV A,R2

SUBB A,R3

MOV R2,A

JMP FINAL

POZITIVE:

MOV R3,B

DIV AB

MOV R5,A

MOV A,R4

ADD A,B

MOV R4,A

MOV B,#100

SUBB A,B

JC NEGATIVE2

JMP POZITIVE2

NEGATIVE2:

CLR C

MOV A,R5

JMP FINAL2

POZITIVE2:

MOV R4,A

MOV A,R5

INC A

FINAL2:

MOV B,R3

ADD A,R2

MOV R2,A

FINAL:

INC R1

INC B

DJNZ R0,LOOP1;Декримент R0, если не ноль то переход на LOOP1

MOV DPTR, #QMAX

MOV A, #0

MOVC A, @A+DPTR

SUBB A, R2;Эта команда ставит флаг переноса(заема),если при вычитании

;для бита 7 необходим заем, иначе сбрасывает флаг переноса; A-=R2

JC M3;прыжок на M3 если флаг переноса остался,т.е. R2>=QMAX

MOV DPTR, #QMIN

MOV A, #0

MOVC A, @A+DPTR

SUBB A, R2;A-=R2

JNC M2;прыжок на M2 если флаг переноса не остался,т.е. R2<=QMIN

MOV P1, #00000010b;QMAX>R2>QMIN

JMP M4

M2:

MOV P1, #00000000b

JMP M4

M3:

MOV P1, #00000011b

M4:

JMP START

ORG 1000h

init:DB 101,121,50,73,119,11,13,115,2,97;Таблица данных во внешней памяти =70.2

QMIN: DB 69

QMAX: DB 71

END

Оценки времени выполнения программ, полученные с помощью отладчика:

С помощью средств отладцика были получены следующие времена работы программ.

Для части 1.2: Время работы составило 00,000082s. Такое время было обусловлено наличием в тексте программы цикла на 8 итераций.

Для части 1.3: Время работы составило 00,000033s. Такое время было обусловлено отсутствием в тексте программы цикла, все команды выполнялись однократно.

Для части 1.4: Время работы составило 00,000549s. Такое время было обусловлено наличием в тексте программы 2х циклов на 10 итераций.

Соседние файлы в папке Первый чел