Ассемблер примеры программ 8051

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

Все директивы предваряются точкой.

Псевдокоманда . ORG 10 h задает ассемблеру адрес ячейки памяти (10 h ), в которой должна быть расположена следующая за ней команда прикладной программы.

Псевдокомандой . EQU можно любому символическому имени, исполь­зуемому в программе, поставить в соответствие определенный операнд. Например, запись

Программирование микроконтроллеров: Урок 4. Язык программирования (Assembler)

приводит к тому, что в процессе ассемблирования всюду, где встретится символическое имя RED , оно будет заменено числом 13.

Символические имена операндов, переопределяемых в процессе ис­полнения программы, определяются псевдокомандой . SET :

ALFA . SET ALFA +1

Ассемблер МК51 позволяет определить символическое имя как адрес внутренних (псевдокоманда . DATA ), внешних (. XDATA ) данных или адрес бита (псевдокоманда . BIT ). Например, директива

ERROR-FLAG .BIT 25Н.З

определяет символическое имя ERROR _ FLAG как третий бит ячейки ОЗУ с адресом 25Н.

Псевдокоманда . DB обеспечивает занесение в память программ константы, пред­ставляющей собой байт.

Псевдокомандой . END программист дает ассемблеру указание об окончании трансляции.

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

В соответствии с форматом команд для представления их объектных кодов отводятся одна, две или три ячейки памяти программ. В первой ячейке всегда располагается код операции, во второй (а для МК51 и в третьей) – непосредственный операнд, адрес прямоадресуемого опе­ранда или смещение (для команд передачи управ­ления МК51). Для команд LCALL и LJMP во втором и третьем байтах объектного кода указывается адрес передачи управления (во втором – старшая часть, в третьем – младшая).

2. Регистры специальных функций i8051

К адресному пространству памяти данных примыкает адресное пространство регистров специальных функций SFR ( Special Function Register ).

Таблица. Размещение регистров специальных функций в пространстве SFR

Наименование

Регистр расширитель аккумулятора ( Multiplication Register)

Слово состояния программы ( Program Status Word )

Регистр указатель стека ( Stack Pointer )

Старший байт регистра указателя данных DPTR ( Data Pointer High )

Младший байт регистра указателя данных DPTR ( Data Pointer Low )

ЯЗЫК АССЕМБЛЕРА С НУЛЯ | #1 НАЧАЛО

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

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

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

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

Регистр режимов таймеров счетчиков (Timer/Counter Mode Control Register)

Регистр управления статуса таймеров (Timer/Counter Control Register)

Регистр приоритетов (Interrupt Priority Control Register)

Регистр маски прерывания (Interrupt Enable Register)

Регистр управления мощностью ( Power Control Register )

Регистр управления приемопередатчиком (Serial Port Control Register)

Буфер приемопередатчика ( Serial Data Buffer )

Примечание. Регистры, символ которых отмечен знаком (*), допускают адресацию своих отдельных бит при использовании команд из группы команд операций над битами.

Адреса, по которым расположены эти регистры, приведены в таблице.

Отметим, что регистры занимают только часть 128-байтового адресного пространства. Т.е. ячейки памяти с адресами 80 H -0 FFH , которые не заняты регистрами, физически отсутствуют, на кристаллах микроконтроллеров семейства 8051 при обращении к ним можно прочитать лишь код команды возврата.

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

— Регистры-защелки SFR параллельных портов Р0. Р3 — служат для ввода-вывода информации.

— Две регистровые пары с именами TH 0, TL 0 и ТН1, TL 1 представляют собой регистры, двух программно-управляемых 16-битных таймеров-счетчиков.

Читайте также:
Устранение проблемы в программе 4 буквы

— Режимы таймеров-счетчиков задаются с использованием регистра TMOD , а управление ими осуществляется с помощью регистра TCON .

— Для управления режимами энергопотребления микро-ЭВМ используется регистр PCON .

— Регистры IP и IE управляют работой системы прерываний микро-ЭВМ,

— регистры SBUF и SCON – работой приемопередатчика последовательного порта.

— Регистр-указатель стека SP в микро-ЭВМ рассматриваемого семейства – восьми битный. Он может адресовать любую область внутренней памяти данных. У микро-ЭВМ семейства 8051 стек «растет вверх», т.е. перед выполнением команды PUSH или CALL содержимое SP инкрементируется, после чего производится запись информации в стек.

Соответственно при извлечении информации из стека регистр SP декрементируется после извлечения информации. В процессе инициализации микро-ЭВМ после сигнала сброса или при включении питающего напряжения в SP заносится код 07Н. Это означает, что первый элемент стека будет располагаться в ячейке памяти с адресом 08Н.

— Регистр-указатель данных DPTR чаще всего используют для фиксации 16-битного адреса в операциях обращения к внешней памяти программ и данных. С точки зрения программиста он может выступать как в виде одного 16-битного регистра, так и в виде двух независимых регистров DPL и DPH

— Аккумулятор (АСС) является источником операнда и местом фиксации результата при выполнении арифметических, логических операций и ряда операций передачи данных. Кроме того, только с использованием аккумулятора могут быть выполнены операции сдвигов, проверка на нуль, формирование флага паритета и т.п. В распоряжении пользователя имеются 8 регистров общего назначения R 0- R 7 одного из четырёх возможных банков. При выполнении многих команд в АЛУ формируется ряд признаков операции (флагов), которые фиксируются в регистре PSW .

— Регистр В используется как источник и как приемник при операциях умножения и деления, обращение к нему, как к регистру SFR , производится аналогично аккумулятору.

— При выполнении ряда команд в арифметико-логическом устройстве (АЛУ) формируются признаки операций – флаги, которые фиксируются в регистре PSW .

3. Регистр флагов (PSW)

Имя и назначение

Источник: mc-plc.ru

Эрни Каспер Программирование на языке Ассемблера для микроконтроллеров семейства i8051

1.Что нужно знать программисту о микроконтроллерах семейства i8051

1.1.Общие сведения об архитектуре i8051

Под архитектурой семейства процессоров подразумевается совокуп­ность внутренних и внешних программно доступных ресурсов, система команд, система прерываний, функции ввода/вывода и протоколы обмена по магистралям. Начнем описание основателя семейства, микроконтрол­лера типа 8051, с перечисления 40 выводов интегральной схемы и крат­ких сведений об их назначении. Названия выводов выделены жирным шрифтом, а номера выводов приведены в скобках. Все эти сведения приведены только для общего представления, а программно доступные ресурсы будут обсуждаться далее по ходу изложения.

Источник питания подключается к выводам Vss (20) «земля» и Vcc (40) +5В. Для управления работой всех устройств в микроконтроллере используется генератор импульсов, который может работать от внешнего источника или автономно (в режиме самовозбуждения). В последнем случае к выводам XTAL2 (18) и XTAL1 (19) должен быть подключен кварцевый резонатор на частоту не более 12 МГц. После включения питания необходимо установить внутренние устройства микроконтроллера в исходное состояние подачей импульса на вывод RST (9). После этого микроконтроллер начинает работу с исполнения команды, записанной по нулевому адресу.

Для связи с внешним миром у микроконтроллера есть двунаправлен­ные порты: 4 параллельных и один последовательный (дуплексный порт для приема и передачи). Программируя обращения по одному и тому же адресу порта, следует иметь в виду, что для чтения и записи используются разные устройства. Параллельные порты работают в байтовом формате, то есть имеют по 8 выводов: РО (32-39), Р1 (1-8), Р2 (21-28) и РЗ (10-17). Порты РО и Р2 используются также для выдачи адреса при обращении к внешним запоминающим устройствам. Выводы, к которым присоеди­нены шины порта 3, могут использоваться:

Читайте также:
С помощью какой программы перенести данные с айфона на Андроид

• для последовательного порта в качестве принимающей RxD (10) и передающей TxD (11) линий,

• для ввода сигналов внешних прерываний INТ0# (12) и INT1# (13),

• для счета внешних импульсов ТО (14) и Т1 (15)

• для выдачи сигналов записи WR# (16) и чтения RD# (17) на внешние запоминающие устройства.

Кроме того для работы с внешними ЗУ используются выводы PSEN# (29), ALE# (30) и ЕА# (31).

Перейдем к внутреннему содержимому микроконтроллера типа 8051. При описании внутренних ресурсов символические обозначения приво­дятся, как это принято в Ассемблером и выделены жирным шрифтом, а адреса указаны в шестнадцатеричном коде.

Рассмотрим сначала некоторые особенности запоминающих уст­ройств (ЗУ). История современных компьютеров началась с того, что фон Нейман предложил записывать программы в оперативную память. В отличие от этого для микроконтроллеров программа и данные разме­щаются в разных ЗУ (гарвардская школа).

Программа и константы записы­ваются в ПЗУ (постоянное ЗУ, или постоянную память) или по-английски ROM (Read Only Memory). А для хранения изменяемых данных использу­ется ОЗУ (оперативное ЗУ, или оперативная память) или по-английски RAM (Random Access Memory). Для общения с внешними ЗУ в микро­контроллере имеются два 16-разрядных регистра: PC (Program Counter) и DPTR (Data PoinTeR).

Первый из них (программный счетчик) исполь­зуется только для чтения команд из ПЗУ, а второй (указатель данных) — для чтения данных из ПЗУ и ОЗУ и для записи в ОЗУ. Таким образом микроконтроллер может использовать адресное пространство до 65536 байт. Преимущество ПЗУ состоит в том, что его содержимое при выключении микроконтроллера не теряется.

Некоторые микроконтроллеры семейства имеют внутреннее ПЗУ (в зависимости от модели его емкость может быть от 2 до 32 Кбайт), что весьма удобно для разработчиков электронных схем. Есть модели микроконтроллеров, содержащие ЭППЗУ (постоянная память с электрической перезаписью), но запись и чтение производятся не одной командой, а специальной подпрограммой.

Для хранения про­грамм могут применяться ПЗУ различных типов. При массовом произ­водстве используются ПЗУ с однократной записью (с «пережиганием»). Повторная запись возможна для ПЗУ со стиранием при помощи ультра­фиолетового света или для ПЗУ с электрической перезаписью. Встроенные в микроконтроллер ПЗУ последнего типа удобны еще тем, что в случае необходимости можно запретить чтение записанной в них программы.

Внутреннее ОЗУ микроконтроллера имеет емкость всего 128 байт. Но адресное пространство у него 8-разрядное, то есть 256 байт. Старшие адреса предназначены для обращения к функциональным регистрам микроконтроллера. Впрочем, у наиболее совершенных моделей этого семейства емкость внутреннего ОЗУ равна 256 байт, но старшие адреса доступны только при косвенной адресации.

Начальные ячейки оперативной памяти (32 байт) используются под однобайтовые регистры общего назначения: RO, Rl, R2, R3, R4, R5, R6 и R7. Их физические адреса зависят от содержимого 3 и 4 разрядов регистра PSW (Processor Status Word — слово состояния процессора, хотя его размер однобайтовый). Распределение адресов для этих групп ячеек, называемых банками 0,1,2 и 3, приведено в следующей таблице.

Источник: studfile.net

Программирование на ассемблере 8051.

Необходимо обратить внимание на следующие особенности системы команд:

2. В командах пересылки регистров отсутствуют команды MOV Rn, Rk, но можно использовать MOV Rn, ad, где ad – прямой адрес Rk, который определяется номером банка и регистра. Например, для R5 2-ого банка прямой адрес определяется как 15+5=20;

3. При распределении регистров не следует использовать R0, R1 каждого банка как регистры временного хранения. Обычно их резервируют для косвенной адресации при работе с массивами в РПД и ВПД;

4. Стек следует располагать в верхней части свободной зоны, а его глубина определяется особенностью подпрограмм и степенью их вложенности. Если возникает необходимость сохранения регистров в стеке, адреса регистров следует заменять прямыми адресами РПД;

5. При использовании DPTR следует помнить, что он состоит из 2-х программно-доступных регистров DPH, DPL. DPH, можно использовать как регистр страниц. Модификация DPTR возможна только командой инкремента. При декрементировании эту операцию необходимо выполнять раздельно над регистрами DPH, DPL;

Читайте также:
Лучшие программы для моделирования интерьера

6. В системе команд присутствует только команда коррекции двоично-десятичных данных после сложения. Если необходимо вычитание, то следует вычитаемое преобразовать в дополнительный код (99-(вычитаемое)+1) и выполнить сложение с последующей коррекцией;

7. При выполнении вычитания операндов необходимо помнить, что в состав команд входит только команда вычитания с заёмом SUBB. Поэтому при первом вычитании необходимо обнулять бит C;

8. Особенностью логических команд является возможность выбора приемника результата A или прямо адресуемой ячейки РПД

Текущее значение PC может быть прочитано следующей процедурой:

Addr: POP ad; старший байт PC

POP ad+1; младший байт PC

11. Битовые команды обеспечивают доступ к битовой зоне и регистрам специальных функций. Исключение составляют регистры: SP, DPTR, TMOD, TH0, TL0, TH1, TL1, SBUF, PCON, которые не допускают побитового обращения. Для реализации битовых переходов достаточно поместить операнд в битовую зону. Например, переход по знаку числа, находящегося в свободной зоне по адресу 50h можно выполнить командами:

MOV AC,50H или MOV 20h,50h

JB AC.7,M1 JB 20.7,M1

12. В битовых командах «С» выполняет функции аккумулятора. В логических командах обработки бит возможно использование инверсного значения. В этом случае перед операндом необходим знак «/» . При этом значение bit не изменяется;

13. При использовании команд переходов предпочтение следует отдавать командам с относительной адресацией, т.к. они обеспечивают перемещаемость программ;

16. Для организации циклов следует использовать команды DJNZ Rn(add), M.

17. При необходимости сравнения операндов следует использовать команду CJNE, в результате выполнения которой формируются признаки равно, больше, меньше.

Если необходимо сравнение A и Rn, то в формате команды следует указывать прямой адрес регистра Rn.

18. Команда JBC используется в тех случаях, когда необходимо проверить значение бита на единицу, а после выполнения перехода его сбросить

ПРИМЕР 1. По срезу сигнала готовности, представляющему собой положительный импульс длительностью 20 мкс, ввести данные через параллельный порт. Разрядность данных 8 бит. Данные записываются в контроллер по условию: xi=40 мкс. При суммировании данных предусмотреть получение результата > 8 бит.

Обобщенная ГСА приведена на рисунке 25.

Рисунок 25.- Граф-схема алгоритма примера 1

Адоп (0:7)- допустимое значение

i(0:7)- номер. вводимых данных

Xi(0:7)- текущее значение вводимых данных

Y(0:7) — входной регистр данных

К(0:7) — счетчик программируемой задержки

n(0:2) – количество данных, соответствующих условию проверки.

S (0:15) – результат суммирования

Г(0) – сигнал готовности

N(0:7) — результат обработки

В(0) – выходной импульс

ГСА не отражает специфики ОМК 8051 как и положено граф-схеме алгоритма. Однако при программировании на ассемблере 8051 необходимо учесть следующее: контроллер восьмиразрядный, следовательно, при формировании суммы необходимо контролировать бит переноса из старшего разряда С, ввод/вывод данных выполняется через параллельные порты которые следует настроить соответствующим образом, необходимо учесть специфику РПД при распределении ресурсов (см. раздел 2).

Так как рассматриваемая задача относительно простая, то распределение необходимых ресурсов не вызывает трудностей: R2 — счетчик достоверных данных, R3- счетчик программируемой задержки, R4- младший байт суммы, R5 — старший байт суммы, R6 — счетчик сдвигов. В качестве порта ввода данных выбираем Р2, а порта управления — Р1, в котором P1.0 используется для ввода сигнала готовности, а P1.1 – для вывод сигнала управления. В данном примере не используются регистры косвенной адресации R0, R1. По сбросу устанавливается банк.0, а параллельные порты настраиваются на ввод данных. Однако при реализации в контроллере нескольких задач рекомендуется для каждой задачи проводить повторную настройку портов, так как в регистре – защелке порта могут сохраниться данные других задач.

Правила оформления ассемблерных программ будут рассмотрены в методических указаниях к лабораторным работам. В примере же будут приведены подробные комментария.

n:.EQUAL 8;Присвоение операндам символического имени

.ORG 100h; Начальный адрес программы

Источник: studopedia.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru