Введение в программирование 8051 на языке ассемблера

Попробуйте наш инструмент устранения неполадок





Ассемблер - это язык программирования низкого уровня, используемый для написания программного кода в терминах мнемоники. Несмотря на то, что в настоящее время существует множество востребованных языков высокого уровня, язык программирования ассемблер широко используется во многих приложениях. Его можно использовать для прямых манипуляций с оборудованием. Он также используется для записи Программный код 8051 эффективно с меньшим количеством тактовых циклов, потребляя меньше памяти по сравнению с другими языками высокого уровня.

8051 Программирование на языке ассемблера

8051 Программирование



8051 Программирование на языке ассемблера

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


8051 Программирование на языке ассемблера

8051 Программирование на языке ассемблера



Язык программирования ассемблера разработан различными компиляторами и «кегельбан' лучше всего подходит для микроконтроллерпрограммирование разработка. Mмикроконтроллерыили процессоры могут понимать только двоичный язык в форме «нулей или единиц». Ассемблер преобразует язык ассемблера в двоичный язык, а затем сохраняет его вмикроконтроллерпамять для выполнения конкретной задачи.

Архитектура микроконтроллера 8051

8051микроконтроллерэто Гарвардская архитектура на основе CISC , и он имеет периферийные устройства, такие как 32 ввода / вывода, таймеры / счетчики, последовательную связь и память. Вмикроконтроллертребует, чтобы программа выполняла операции, требующие памяти для сохранения и чтения функций. 8051микроконтроллерсостоит из памяти RAM и ROM для хранения инструкций.

8051 Микроконтроллер Arctitecuture

Архитектура микроконтроллера 8051

Регистр - это основная часть процессоры имикроконтроллеры который содержится в памяти, что обеспечивает более быстрый способ сбора и хранения данных. Программирование на языке ассемблера 8051 основано на регистрах памяти. Если мы хотим управлять данными в процессоре или контроллере, выполняя вычитание, сложение и т. Д., Мы не можем делать это непосредственно в памяти, но для обработки и хранения данных нужны регистры.Микроконтроллерысодержат несколько типов регистров, которые можно классифицировать в соответствии с их инструкциями или содержанием, которое в них работает.

8051 Программы для микроконтроллеров на языке ассемблера

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


Правила языка ассемблера

  • Код сборки должен быть написан заглавными буквами.
  • После меток должен стоять двоеточие (метка :)
  • Все символы и метки должны начинаться с буквы.
  • Все комментарии набираются строчными буквами.
  • Последняя строка программы должна быть директивой END.

Мнемоника языка ассемблера представлена ​​в виде кода операции, например MOV, ADD, JMP и т. Д., Которые используются для выполнения операций.

Код операции: Код операции - это отдельная инструкция, которая может быть выполнена ЦП. Здесь код операции - это инструкция MOV.

Операнды: Операнды - это отдельные данные, которыми можно управлять с помощью кода операции. Например, операция умножения выполняется операндами, которые умножаются на операнд.

Синтаксис: MUL a,б

Элементы программирования на языке ассемблера:

  • Соберите рекомендации
  • Набор инструкций
  • Режимы адресации

Инструкции по сборке:

Директивы сборки дают указания ЦП. 8051микроконтроллерсостоит из различных директив сборки, которые задают направление блоку управления. Наиболее полезными директивами являются директивы программирования 8051, такие как:

  • ORG
  • БД
  • EQU
  • КОНЕЦ

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

Синтаксис: ORG 0000h

БД(определить байт): Байт определения используется для разрешения строки байтов. Например, напечатайте «EDGEFX», в котором каждый символ берется по адресу, и, наконец, напечатайте «строку» из БД напрямую с двойными кавычками.

Синтаксис:

ORG 0000h

MOV a, # 00h
————-
————-
БД «EDGEFX»

EQU (эквивалент): Эквивалентная директива используется для приравнивания адреса переменной.

Синтаксис:

рег равно,09ч
—————–
—————–
MOVрег,# 2ч

КОНЕЦ: Директива END используется для обозначения конца программы.

Синтаксис:

рег равно,09ч

—————–
—————–
MOVрег,# 2ч
КОНЕЦ

Режимы адресации:

Способ доступа к данным называется режимом адресации. ЦП может получать доступ к данным разными способами, используя режимы адресации. 8051микроконтроллерсостоит из пяти режимов адресации, таких как:

  • Режим немедленной адресации
  • Регистрация режима адресации
  • Режим прямой адресации
  • Режим косвенной адресации
  • Базовый режим адресации индекса

Режим немедленной адресации:

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

Синтаксис:

MOV A, # 20h // A - этоанрегистр аккумулятора, 20 хранится в A //
MOV R0,# 15 // R0 - регистр общего назначения 15 хранится в регистре R0 //
MOV P0, # 07h // P0 - это регистр SFR 07, хранящийся в P0 //
MOV 20ч,# 05h // 20h - адрес регистра 05, хранящегося в 20h //

Бывший:

MOV R0, # 1
MOV R0, # 20 // R0<—R0[15] +20, окончательное значение сохраняется в R0 //

Зарегистрируйте режим адресации:

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

Синтаксис:

MOV A, B // A - регистр SFR, B - регистр общего назначения //
MOV R0, R1 // Неверная инструкция, GPR в GPR невозможно //

БЫВШИЙ:

MOV R0, # 02h
MOV A, # 30h
ДОБАВИТЬ R0, A // R0<—R0+A, the final value is stored in the R0 register//

Режим прямой адресации

В этом режиме адресации источником или получателем (или и источником, и получателем) должен быть адрес, но не значение.

Синтаксис:

MOV A,20h // 20h - адрес A - регистр //
MOV 00h, 07h // оба адресуются из регистров GPS //

Бывший:

MOV 07h,# 01ч
MOV A, # 08h
ДОБАВИТЬ,07ч // А<—A+07h the final value is stored in A//

Режим косвенной адресации:

В этом режиме адресации источник или адресат (или пункт назначения, или источник) должны бытьккосвенный адрес, но не значение. Этот режим адресации поддерживает концепцию указателя. Указатель - это переменная, которая используется для хранения адреса другой переменной. Эта концепция указателя используется только для регистров R0 и R1.

Синтаксис:

MOVR0, # 01h // значение 01 хранится в регистре R0, адрес R0 - 08h //
MOV R1, # 08h // R1 - переменная-указатель,магазиныадрес (08h) из R0 //
MOV 20ч,@ R1 // Значение 01 хранится в 20-м адресе регистра GP //

Режим косвенной адресации

Режим косвенной адресации

Базовый режим адресации индекса:

Этот режим адресации используется для чтения данных из внешняя память или ПЗУ . Все режимы адресации не могут читать данные из памяти кода. Код должен считываться через регистр DPTR. DPTR используется для указания данных в коде или внешней памяти.

Синтаксис:

MOVC A, @ A + DPTR // C указывает память кода //
MOCX A, @ A + DPTR // X указывает внешнюю память //
EX: MOV A, # 00H // 00H хранится в регистре A //
MOV DPTR, # 0500H // DPTR указывает адрес 0500h в памяти //
MOVC A, @ A + DPTR // отправляем значениекрегистр A //
MOV P0, A // дата отправки A регистратору заказа //

Набор инструкций:

Набор инструкций - это структура контроллера или процессора, которая выдает команды контроллеру, чтобы направлять контроллер для обработки данных. Набор команд состоит из инструкций, собственных типов данных, режимов адресации, регистров прерываний, исключительной обработки и архитектуры памяти. В 8051микроконтроллер может следовать инструкциям CISC с архитектурой Гарварда. В случае программирования 8051 различные типы инструкций CISC включают:

  • Набор инструкций по передаче данных
  • Последовательный набор инструкций
  • Набор арифметических инструкций
  • Ветвление Iинструкциянабор
  • Loop Instrcution Set
  • Набор условных инструкций
  • Безусловный набор инструкций
  • Набор логических инструкций
  • Набор логических инструкций

Набор арифметических инструкций:

Арифметические инструкции выполняют основные операции, такие как:

  • Добавление
  • Умножение
  • Вычитание
  • Разделение

Добавление:

ORG 0000h
MOV R0, # 03H // перемещаем значение 3 в регистр R0 //
MOV A, # 05H // переместить значение 5 в аккумулятор A //
Добавить A, 00H //добавитьзначение со значением R0 и сохраняет результатв//
КОНЕЦ

Умножение:

ORG 0000h
MOV R0, # 03H // перемещаем значение 3 в регистр R0 //
MOV A, # 05H // переместить значение 5 в аккумулятор A //
MUL A, 03H //Умноженныйрезультат сохраняется в аккумуляторе A //
КОНЕЦ

Вычитание:

ORG 0000h
MOV R0, # 03H // перемещаем значение 3 в регистр R0 //
MOV A, # 05H // переместить значение 5 в аккумулятор A //
SUBB A, 03H // Значение результата сохраняется в аккумуляторе A //
КОНЕЦ

Разделение:

ORG 0000h
MOV R0, # 03H // перемещаем значение 3 в регистр R0 //
MOV A, # 15H // переместить значение 5 в аккумулятор A //
DIV A, 03H // окончательное значение сохраняется в аккумуляторе A //
КОНЕЦ

Условные инструкции

ЦП выполняет инструкции на основе условия, проверяя статус одного бита или статус байта. 8051микроконтроллерсостоит из различных условных инструкций, таких как:

  • JB -> Перейти ниже
  • JNB -> Перейти если не ниже
  • JC -> Перейти, если нести
  • JNC -> Перейти, еслинетНести
  • JZ -> Перейти, если ноль
  • JNZ -> Перейти, еслинетНуль
Условные инструкции

Условные инструкции

1. Синтаксис:

JB P1.0, этикетка
- - - - - - - -
- - - - - - - -
Этикетка: - - - - - - - -
- - - - - - - -
КОНЕЦ

2. Синтаксис:

JNB P1.0, этикетка
- - - - - - - -
- - - - - - - -
Этикетка: - - - - - - - -
- - - - - - - -
КОНЕЦ

3. Синтаксис:

JC, этикетка
- - - - - - - -
- - - - - - - -
Этикетка: - - - - - - - -
- - - - - - - -
КОНЕЦ

4. Синтаксис:

JNC, этикетка
- - - - - - - -
- - - - - - - -
Этикетка: - - - - - - - -
- - - - - - - -
КОНЕЦ
5. Синтаксис:

JZ, этикетка
- - - - - - - -
- - - - - - - -
Этикетка: - - - - - - - -
- - - - - - - -
КОНЕЦ

6. Синтаксис:

JNZ, этикетка
- - - - - - - -
- - - - - - - -
Этикетка: - - - - - - - -
- - - - - - - -
КОНЕЦ

Инструкции по вызову и прыжку:

Инструкции вызова и перехода используются, чтобы избежать репликации кода программы. Когда какой-то конкретный код используется более одного раза в разных местах программы, если мы упоминаемконкретное имяккод тогдамы могли бы использовать это имя в любом месте программы, не вводя каждый раз код. Это снижает сложность программы. Программирование 8051 состоит из инструкций вызова и перехода, таких как LCALL, SJMP.

  • LCALL
  • ВЫЗОВ
  • SJMP
  • LJMP

1. Синтаксис:

ORG 0000h
- - - - - - - -
- - - - - - - -
ACALL, метка
- - - - - - - -
- - - - - - - -
SJMP STOP
Этикетка: - - - - - - - -
- - - - - - - -
- - - - - - - -
верно
ОСТАНОВКА:NOP

2. Синтаксис:

ORG 0000h
- - - - - - - -
- - - - - - - -
LCALL, этикетка
- - - - - - - -
- - - - - - - -
SJMP STOP
Этикетка: - - - - - - - -
- - - - - - - -
- - - - - - - -
верно
ОСТАНОВКА:NOP

Инструкции по вызову и прыжку

Инструкции по вызову и прыжку

Инструкции по петле:

Инструкции цикла используются для повторения блока каждый раз при выполнении операций увеличения и уменьшения. 8051микроконтроллерсостоят из двух типов инструкций цикла:

  • CJNE -> сравнивать и прыгать, если не равно
  • DJNZ -> уменьшение и скачок, если не ноль

1. Синтаксис:

изCJNE
MOV A, # 00H
MOV B, # 10H
Этикетка: INC A
- - - - - -
- - - - - -
CJNE A, этикетка

2. Синтаксис:

изDJNE

MOV R0, # 10H
Этикетка: - - - - - -
- - - - - -
DJNE R0, этикетка
- - - - - -
- - - - - -
КОНЕЦ

Набор логических инструкций:

Набор инструкций микроконтроллера 8051 предоставляет инструкции AND, OR, XOR, TEST, NOT и логической логики для установки и очистки битов в зависимости от потребности программы.

Набор логических инструкций

Набор логических инструкций

1. Синтаксис:

MOV A, # 20H / 00100000 /
MOV R0, # 03H / 00000101 /
ORL A, R0 // 00100000/00000101 = 00000000 //

2. Синтаксис:

MOV A, # 20H / 00100000 /
MOV R0, # 03H / 00000101 /
ANL A, R0

3. Синтаксис:

MOV A, # 20H / 00100000 /
MOV R0, # 03H / 00000101 /
XRL A, R0

Операторы смены

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

  • RR -> повернуть вправо
  • RRC -> Повернуть вправо через перенос
  • RL -> Повернуть влево
  • RLC -> Повернуть влево через перенос

Повернуть вправо (RR):

В этой операции сдвига старший бит становится младшим битом, и все биты последовательно сдвигаются в правую сторону.

Синтаксис:

MOV A, # 25h
RR A

Повернуть влево (RL):

В этой операции сдвига старший бит становится младшим битом, и все биты последовательно сдвигаются в сторону левой стороны.

Синтаксис:

MOV A, # 25h
RL A

RRC Повернуть вправо через перенос:

В этой операции сдвига LSB перемещается для переноса, и перенос становится MSB, и все биты сдвигаются в правую сторону побитно.

Синтаксис:

MOV A, # 27h
RRC A

RLC Повернуть влево через перенос:

В этой операции сдвига MSB перемещается для переноса, и перенос становится LSB, и все биты сдвигаются влево в побитовой позиции.

Синтаксис:

MOV A, # 27h
RLC A

Основные встроенные программы C:

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

Светодиод мигает при использовании с 8051микроконтроллер:

  • Отображение числа на 7-сегментном дисплее с помощью микроконтроллера 8051
  • Расчеты таймера / счетчика и программирование с использованием 8051микроконтроллер
  • Расчеты и программирование последовательной связи с использованием 8051микроконтроллер

Светодиодные программы с 8051 Mмикроконтроллер

1. WAP для переключения светодиодов PORT1.

ORG 0000H
ПЕРЕКЛЮЧИТЬ: MOV P1, # 01 //шаг00000001 в регистр p1 //
ЗАДЕРЖКА ВЫЗОВА // выполнение задержки //
MOV A, P1 // двигатьсязначение p1к аккумулятору //
CPL A // дополнительное значение A //
MOV P1, A // перемещаем 11111110 в регистр port1 //
ЗАДЕРЖКА ВЫЗОВА // выполнение задержки //
SJMP TOGLE
ЗАДЕРЖКА: MOV R5, # 10H // загружаем регистр R5 с 10 //
ДВА: MOV R6, # 200 // загрузить регистр R6 с 200 //
ONE: MOV R7, # 200 // загружаем регистр R7 с 200 //
DJNZ R7, $ // уменьшаем R7 до нуля //
DJNZ R6, ONE // уменьшаем R7 до нуля //
DJNZ R5, TWO // уменьшаем R7 до нуля //
RET // вернуться в основную программу //
КОНЕЦ

Расчет таймера / счетчика и программа с использованием 8051 Mмикроконтроллер:

Задержка - один из важных факторов в разработке прикладного программного обеспечения. В таймеры и счетчики аппаратные компонентымикроконтроллер, которые используются во многих приложениях для обеспечения точной временной задержки с счетными импульсами. BОстальные задачи реализуются программной техникой.

1. WAP для расчета задержки времени 500 мкс.

MOV TMOD, # 10H // выбор режима таймера по регистрам //
MOV TH1, # 0FEH // сохраняем время задержки в старшем бите //
MOV TL1, # 32H // сохраняем время задержки в младшем бите //
JNB TF1, $ // уменьшаем значение таймера до нуля //
CLR TF1 // сбросить флаг таймеракусочек//
CLR TR1 // ВЫКЛЮЧЕНИЕ таймера //

2. WAP для переключения светодиодов.с5секвременная задержка

ORG 0000H
ВОЗВРАТ: MOV PO, # 00H
ACALL DELAY
MOV P0, # 0FFH
ACALL DELAY
ВОЗВРАТ ВОДА
ЗАДЕРЖКА: MOV R5, # 50H // загружаем регистр R5 50 //
DELAY1: MOV R6, # 200 // загрузить регистр R6 с 200 //
DELAY2: MOV R7, # 229 // загрузить регистр R7 200 //
DJNZ R7, $ // уменьшаем R7 до нуля //
DJNZ R6, DELAY2 // уменьшаем R6 до нуля //
DJNZ R5, DELAY1 // уменьшаем R5 до нуля //
RET // вернуться в основную программу //
КОНЕЦ

3. WAP для подсчета 250 импульсов с использованием mode0 count0

Синтаксис:

ORG 0000H
MOV TMOD, # 50H // выбираем счетчик //
MOV TH0, # 15 // переместить счетчик импульсов на более высокий бит //
MOV TH1, # 9FH //шагсчетные импульсы, младший бит //
SET TR0 // ВКЛЮЧЕНИЕ таймера //
JNB $ // уменьшаем значение счетчика до нуля //
CLR TF0 // очистить счетчик, флагкусочек//
CLR TR0 // останавливаем таймер //
КОНЕЦ

Программирование последовательной связи с использованием 8051 Mмикроконтроллер:

Последовательная связь обычно используется для передачи и приема данных. 8051микроконтроллерсостоят из последовательной связи UART / USART, а сигналы передаются и принимаютсяTxи контакты Rx. Связь UART последовательно передает данные побитно. UART - это полудуплексный протокол, который передает и принимает данные, но не одновременно.

1. WAP для передачи символов на гипертерминал

MOV SCON, # 50H // установить последовательную связь //
MOV TMOD, # 20H // выбираем режим таймера //
MOV TH1, # -3 // установить скорость передачи //
SET TR1 // ВКЛЮЧЕНИЕ таймера //
MOV SBUF, # ’S’ // передать S в последовательное окно //
JNB TI, $ // уменьшаем значение таймера до нуля //
CLR RI // очистить прерывание приема //
CLR TR1 // очистить таймер //

2. WAP для передачи символа на гипертерминал.

MOV SCON, # 50H // установить последовательную связь //
MOV TMOD, # 20H // выбираем режим таймера //
MOV TH1, # -6 // установить скорость передачи //
SET TR1 // по таймеру //
MOV SBUF, # ’S’ // передать S в последовательное окно //
JNB RI, $ // уменьшаем значение таймера до нуля //
CLR RI // очистить прерывание приема //
MOV P0, SBUF // отправляем значение регистра SBUF на порт 0 //
CLR TR1 // очистить таймер //

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