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

Опитайте Нашия Инструмент За Премахване На Проблемите





Асемблерният език е език за програмиране на ниско ниво, използван за писане на програмен код от гледна точка на мнемоника. Въпреки че в момента има много езици на високо ниво, които се търсят, езикът за програмиране на сборки е широко използван в много приложения и може да се използва за директни хардуерни манипулации. Използва се и за писане на Код за програмиране 8051 ефективно с по-малък брой тактови цикли, като консумира по-малко памет в сравнение с другите езици на високо ниво.

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

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



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

Асемблерният език е изцяло хардуерен език за програмиране. Вградените дизайнери трябва да имат достатъчно познания за хардуера на конкретен процесор или контролери, преди да напишат програмата. Асемблерният език е разработен от мнемоника, поради което потребителите не могат да го разберат лесно, за да модифицират програмата.


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

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



Езикът за програмиране на асемблери е разработен от различни компилатори и боулинг писта' е най-подходящ за микроконтролерпрограмиране развитие. Ммикроконтролериили процесорите могат да разбират само двоичен език под формата на „0s или 1s“ Асемблер преобразува асемблерния език в двоичен език и след това го съхранява вмикроконтролерпамет за изпълнение на конкретната задача.

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

8051микроконтролере Базирана на CISC архитектура в Харвард , и има периферни устройства като 32 I / O, таймери / броячи, серийна комуникация и памет. Theмикроконтролеризисква програма за извършване на операциите, които изискват памет за запазване и за четене на функциите. 8051микроконтролерСъстои се от RAM и ROM памет за съхранение на инструкции.

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

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

Регистърът е основната част в процесорите имикроконтролери която се съдържа в паметта, която осигурява по-бърз начин за събиране и съхраняване на данните. Програмирането на 8051 асемблерен език се основава на регистрите на паметта. Ако искаме да манипулираме данни с процесор или контролер, като извършваме изваждане, събиране и т.н., не можем да направим това директно в паметта, но се нуждаят от регистри за обработка и съхраняване на данните.Микроконтролерисъдържат няколко вида регистри, които могат да бъдат класифицирани според техните инструкции или съдържание, което функционира в тях.

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

Асемблерният език се състои от елементи, в които всички се използват за писане на програматапоследователен начин. Следвайте дадените правила, за да пишете програмиране на асемблерен език.


Правила на езика на събранието

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

Мнемониката на асемблерния език е под формата на op-код, като MOV, ADD, JMP и т.н., които се използват за извършване на операциите.

Оп код: Оп-кодът е единична инструкция, която може да бъде изпълнена от процесора. Тук оп-кодът е инструкция за MOV.

Операнди: Операндите са единични данни, които могат да се управляват от оп-кода. Например операцията за умножение се извършва от операндите, които се умножават по операнда.

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

Елементите на езиковото програмиране на събранието:

  • Съберете насоки
  • Комплект инструкции
  • Адресиране на режими

Инструкции за сглобяване:

Директивите за сглобяване дават указанията към процесора. 8051микроконтролерсе състои от различни видове директиви за сглобяване, за да се даде насоката на контролния блок. Най-полезните директиви са програмирането на 8051, като например:

  • ORG
  • DB
  • ЕКВ
  • КРАЙ

ORG(произход): Тази директива посочва началото на програмата. Това се използва за задаване на адреса на регистъра по време на сглобяването. Например ORG 0000h казва на компилатора всички следващи кодове, започващи от адрес 0000h.

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

DB(дефинирайте байт): Дефинираният байт се използва, за да позволи низ от байтове. Например, отпечатайте “EDGEFX”, където всеки знак се взема от адреса и накрая отпечатва “низа” от DB директно с двойни кавички.

Синтаксис:

ORG 0000h

MOV a, # 00h
————-
————-
DB “EDGEFX”

EQU (еквивалент): Еквивалентната директива се използва за приравняване на адреса на променливата.

Синтаксис:

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

КРАЙ: Директивата END се използва за обозначаване на края на програмата.

Синтаксис:

рег равен,09ч

—————–
—————–
MOVрег,# 2ч
КРАЙ

Режими на адресиране:

Начинът на достъп до данни се нарича режим на адресиране. Процесорът може да получи достъп до данните по различни начини, като използва режими за адресиране. 8051микроконтролерсе състои от пет режима за адресиране като:

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

Режим на незабавно адресиране:

В този режим на адресиране източникът трябва да е стойност, която може да бъде последвана от „#“ и дестинацията трябва да бъде SFR регистри, регистри с общо предназначение и адрес. Използва се за незабавно съхраняване на стойността в регистрите на паметта.

Синтаксис:

MOV A, # 20h // A еanрегистър на акумулатора, 20 се съхранява в A //
MOV R0,# 15 // R0 е регистър с общо предназначение 15 се съхранява в регистъра R0 //
MOV P0, # 07h // P0 е SFR регистър07 се съхранява в P0 //
MOV 20h,# 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,# 01h
MOV A, # 08h
ДОБАВИ,07h // A<—A+07h the final value is stored in A//

Режим на непряко адресиране:

В този режим на адресиране източникът или дестинацията (или дестинацията или източникът) трябва да сада сеиндиректен адрес, но не и стойност. Този режим на адресиране поддържа концепцията на указателя. Показалецът е променлива, която се използва за съхраняване на адреса на другата променлива. Тази концепция за указател се използва само за регистри R0 и R1.

Синтаксис:

MOVR0, # 01h // 01 стойността се съхранява в регистъра R0, R0 адресът е 08h //
MOV R1, # 08h // R1 е променливата на указателя, коятомагазиниадрес (08h) на R0 //
MOV 20h,Стойността @ R1 // 01 се съхранява в 20h адреса на регистъра на GP //

Режим на непряко адресиране

Режим на непряко адресиране

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

Този режим на адресиране се използва за четене на данните от външна памет или ROM памет . Всички режими за адресиране не могат да четат данните от кодовата памет. Кодът трябва да се чете през регистъра DPTR. DPTR се използва за насочване на данните в кода или външната памет.

Синтаксис:

MOVC A, @ A + DPTR // C показва кодова памет //
MOCX A, @ A + DPTR // X показва външна памет //
Пример: MOV A, # 00H // 00H се съхранява в регистър A //
MOV DPTR, # 0500H // DPTR точки 0500h адрес в паметта //
MOVC A, @ A + DPTR // изпраща стойносттада серегистър A //
MOV P0, A // дата на A изпратете до регистратора на PO //

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

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

  • Комплект инструкции за прехвърляне на данни
  • Комплект последователни инструкции
  • Комплект аритметични инструкции
  • Разклонение Instructionкомплект
  • Loop Instrruption 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 СТОП
Етикет: - - - - - - - -
- - - - - - - -
- - - - - - - -
нали
СПРИ СЕ:НЕ

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

ORG 0000h
- - - - - - - -
- - - - - - - -
LCALL, етикет
- - - - - - - -
- - - - - - - -
SJMP СТОП
Етикет: - - - - - - - -
- - - - - - - -
- - - - - - - -
нали
СПРИ СЕ:НЕ

Инструкции за повикване и скок

Инструкции за повикване и скок

Инструкции за цикъл:

Инструкциите за цикъл се използват за повтаряне на блока всеки път, докато се извършват операциите за увеличаване и намаляване. 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):

При тази операция за превключване MSB става LSB и всички битове се преместват последователно по дясно.

Синтаксис:

MOV A, # 25ч
RR A

Завъртане наляво (RL):

При тази операция за превключване MSB става LSB и всички битове се преместват последователно вляво по малко.

Синтаксис:

MOV A, # 25ч
RL A

RRC Завъртане надясно чрез пренасяне:

При тази операция за превключване, LSB се премества за пренасяне и пренасянето става MSB и всички битове се изместват към дясната страна бит по позиция на бита.

Синтаксис:

MOV A, # 27h
RRC A

RLC Завъртане наляво чрез пренасяне:

При тази операция за превключване MSB се премества да пренася и пренасянето става LSB и всички битове се преместват в лява страна в малко по битово положение.

Синтаксис:

MOV A, # 27h
RLC A

Основни вградени C програми:

Theмикроконтролерпрограмирането се различава за всеки тип операционна система. Има много операционни системи като Linux, Windows, RTOS и т.н. RTOS обаче има няколко предимства за разработката на вградена система. Някои от примерите за програмиране на ниво Асамблея са дадени по-долу.

LED мига, използвайки с 8051микроконтролер:

  • Показване на номера на 7-сегментен дисплей с помощта на микроконтролер 8051
  • Изчисления на таймер / брояч и програмиране с помощта на 8051микроконтролер
  • Изчисления за последователна комуникация и програмиране с използване на 8051микроконтролер

LED програми с 8051 Mмикроконтролер

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

ORG 0000H
TOGLE: MOV P1, # 01 //ход00000001 към p1 регистъра //
ЗАДЪРЖАНЕ НА ПОЗВАНИЕ // изпълнение на забавяне //
MOV A, P1 // преместванеp1 стойносткъм акумулатора //
CPL A // допълва стойност A //
MOV P1, A // преместване 11111110 в порт1 регистър //
ЗАДЪРЖАНЕ НА ПОЗВАНИЕ // изпълнение на забавяне //
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, ДВА // намалява R7, докато стане нула //
RET // връщане към основната програма //
КРАЙ

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

Забавянето е един от важните фактори при разработването на приложен софтуер. The таймери и броячи са хардуерни компоненти намикроконтролер, които се използват в много приложения, за да осигурят точното забавяне на времето с броячи импулси. Б.другите задачи се изпълняват от софтуерната техника.

1. WAP за изчисляване на 500us закъснение.

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

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

ORG 0000H
RETURN: MOV PO, #00H
ЗАКЪСНЕНИЕ НА ВСИЧКОТО
MOV P0, # 0FFH
ЗАКЪСНЕНИЕ НА ВСЕ
ВРЪЩАНЕ СЕКС
ЗАДЪРЖАНЕ: MOV R5, # 50H // товарен регистър R5 с 50 //
DELAY1: MOV R6, # 200 // регистър за зареждане R6 с 200 //
ЗАДЪРЖАНЕ2: 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 //ходброещите импулси, долен бит //
ЗАДАВАНЕ 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 // задаване на скоростта на предаване //
ЗАДАВАНЕ 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 на асемблерен език накратко с примерни програми. Надяваме се, че тази адекватна информация за асемблерния език със сигурност ще бъде полезна за читателите и очакваме техните ценни коментари в раздела за коментари по-долу.