Изучение кросс-средств разработки ПО для 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;

 

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

 

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

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

 

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

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

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

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

 

Adjustment Program Epson L805 (EURO, CIS) Ver.1.0.0
Adjustment Program Epson L805 (EURO, CIS) Ver.1.0.0


Adjustment Program Epson L405 (ECC) Ver.1.0.0
Adjustment Program Epson L405 (ECC) Ver.1.0.0


Adjustment program Epson WorkForce WF-2630
Adjustment program Epson WorkForce WF-2630