В начало

Изучение кросс-средств разработки ПО для MCS51 (Лабораторная работа)

 

Цель работы

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

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

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

 

Общие сведения

Разработка программного обеспечения с использованием кросс-средств в общем случае включает следующие этапы:

1.Подготовка программы на входном языке с использованием текстового редактора.

2.Трансляция программы в объектный код.

3.Отладка программы с помощью программного отладчика (симулятора).

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

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

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

Язык ассемблера ASM51 имеет стандартный формат операторов ассемблера ОМК MCS51:

[<метка>:] <операция> [<операнд(ы)>] [;<комментарий>].

Здесь и далее в квадратных скобках указываются необязательные элементы синтаксических конструкций.

Поле метки содержит символическое имя ячейки памяти, в которой хранится отмеченная команда или операнд. Метка представляет собой символьную комбинацию, начинающуюся с буквы и содержащую не более 13 символов. Метка должна отделяться от поля операнда двоеточием. Ассемблер ТASM различает шрифт, используемый при наборе метки, то есть "LABEL" и "label" будут интерпретированы как различные метки.

В поле операции записывается мнемоническое обозначение команды ОМК, например MOV - пересылка, ADD - сложение и т. д.

В поле операндов задаются участвующие в операции операнды. Операторы ассемблера могут иметь ни одного, один или два операнда. В последнем случае операнды разделяются запятой. Операнд может быть задан своим адресом (прямым или косвенным) или непосредственным значением. Прямой адрес может быть задан числом, мнемоническим обозначением или символическим именем. Например:

MOV R0,128 - используется мнемоническое обозначение регистра R0 и числовое значение адреса ячейки в памяти данных;

ADD A,SUM - используется мнемоническое обозначение аккумулятора и символическое обозначение адреса операнда в памяти данных.

Признаком косвенной адресации служит префикс @. Например, команда MOV @R0,A пересылает содержимое аккумулятора в ячейку резидентной памяти данных (РПД), адресуемую содержимым регистра R0 (косвенная адресация РПД осуществляется с использованием регистров R0 и R1 текущего банка, а внешней памяти данных (ВПД) - с использованием регистра-указателя данных DPTR).

Непосредственный операнд представляется числом или символическим именем с обязательным префиксом #. Например, MOV R6,#15 или ADDC A,#OP1. Задаваемые числами адреса и непосредственные значения должны содержать суффикс указания системы счисления: B - двоичная, O - восьмеричная, D - десятичная и Н - шестнадцатеричная. Число без суффикса по умолчанию считается десятичным. Если шестнадцатеричная константа начинается с буквы, ей должен предшествовать нуль, например: 0A4H, 0D7H.

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

Таблица 1

Директива

Комментарий

ORG

Задает начальный адрес объектного кода для следующей за директивой программы.

Например: ORG 100H;

EQU

Присваивает символическому имени абсолютное значение.

Например: SUM EQU 48H;

DB

Обеспечивает занесение в память программ байтовой константы или цепочки байтовых констант.

Например: DB 0BH,77H;

DW

Обеспечивает занесение в память программ одной или нескольких двухбайтовых констант.

Например: DW 3504H,10FFH,65ECH;

END

Указывает конец программы.

 

Особенностью ассемблера ASM51 является необходимость определять адреса, соответствующие мнемоническим обозначениям регистров специальных функций (РСФ). Задавать адреса РСФ можно непосредственно в программе или путем включения в программу соответствующих файлов (MOD52 или MOD812).

Далее приведены адреса РСФ ОМК MCS51.

 

Таблица 2

Мнемоническое
обозначение

Название регистра

Адрес

 

 * ACC

Аккумулятор

0E0h

 

 * B

Регистр-расширитель аккумулятора

0F0h

 

 * PSW

Cлово состояния программы

0D0h

 

 SP

Регистр указатель стека

81h

 

 DPTR

Регистр указатель данных (DPH)

 (DPL)

83h

82h

 

 * P0

Порт 0

80h

 

 * P1

Порт 1

90h

 * P2

Порт 2

0A0h

 * P3

Порт 3

0B0h

 * IP

Регистр приоритетов

0B8h

 * IE

Регистр маски прерываний

0A8h

 TMOD

Регистр режима таймера/счетчика

89h

 * TCON

Регистр управления/статуса таймера

88h

 TH0

Таймер 0(старший байт)

8Ch

 TL0

Таймер 0(младший байт)

8Ah

 TH1

Таймер 1(старший байт)

8Dh

 TL1

Таймер 1(младший байт)

8Bh

 * SCON

Регистр управления приемопередатчиком

98h

 SBUF

Буфер приемопередатчика

99h

 PCON

Регистр управления мощностью

87h

 

В результате ассемблирования создается объектный файл в абсолютном двоичном формате - <имя_файла>.hex и файл листинга - <имя_файла>.lst, в котором содержатся указания на ошибки, выявленные в процессе трансляции.

После исправления всех синтаксических ошибок (если таковые имелись) необходимо загрузить полученный объектный файл в отладчик для пошаговой отладки алгоритма. Используемый в данном цикле лабораторных работ полноэкранный отладчик ADSIM812 позволяет:

1.      загрузить для отладки сгенерированные ассемблером объектные файлы;

2.      просмотреть на экране дизассемблированный текст загруженной программы, включая адреса и коды команд, содержимое всех регистров ОМК, область памяти программ, резидентной и внешней памяти данных;

3.      выполнить загружаемую программу по шагам с просмотром результата после каждого шага и в непрерывном режиме с остановом по достижении задаваемых пользователем адресов;

4.      внести изменения в загружаемую программу в мнемонических обозначениях ассемблера, а также в машинных кодах;

5.      внести изменения в содержимое регистров, флагов и памяти в командном режиме и в режиме полноэкранного редактирования;

6.      получить трассировку программы;

7.      определить время выполнения загружаемой программы и её частей по встроенному счетчику.

Подробное описание отладчика ADSIM812 содержится в документации (файл Aduc812.pdf).

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

1. Повторить последовательность и назначение этапов подготовки программного обеспечения с использованием кросс-средств. Повторить синтаксис директив ассемблера ASM51, команды и режимы адресации OMK MCS51.

2. Подготовить программу на языке ассемблера, выполняющую пересылку массива констант (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 (начало цикла).

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

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

 

Xср >= Qmax,                                    p=11;

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

Xср <= Qmin,                                     p=00;

 

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

 

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

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

 

Содержание отчета

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

Блок-схемы алгоритмов программ, а также листинги соответствующих программ на ассемблере.

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

 

10 VISA VIRTUAL + Быстрая выписка
10 VISA VIRTUAL + Быстрая выписка


iTunes Gift Card (Россия) 1000 рублей
iTunes Gift Card (Россия) 1000 рублей


iTunes Gift Card (Russia) 5000 руб
iTunes Gift Card (Russia) 5000 руб