Assembly Dilinde 8051 Programlamaya Giriş

Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin





Assembly dili, program kodunu anımsatıcı olarak yazmak için kullanılan düşük seviyeli bir programlama dilidir. Şu anda talep gören birçok yüksek seviyeli dil olmasına rağmen, montaj programlama dili birçok uygulamada yaygın olarak kullanılmaktadır ve doğrudan donanım manipülasyonları için kullanılabilir. Aynı zamanda 8051 programlama kodu diğer yüksek seviyeli dillere kıyasla daha az bellek tüketerek daha az sayıda saat döngüsü ile verimli bir şekilde.

8051 Assembly Dili ile Programlama

8051 Programlama



8051 Assembly Dili ile Programlama

Assembly dili, tamamen donanımla ilgili bir programlama dilidir. Gömülü tasarımcılar, programı yazmadan önce belirli işlemcinin veya denetleyicilerin donanımı hakkında yeterli bilgiye sahip olmalıdır. Assembly dili anımsatıcılar tarafından geliştirildiğinden, kullanıcılar programı değiştirmeyi kolayca anlayamazlar.


8051 Assembly Dili ile Programlama

8051 Assembly Dili ile Programlama



Assembly programlama dili, çeşitli derleyiciler tarafından geliştirilmiştir ve 'Bowling pisti' en uygun olanı mikrodenetleyiciprogramlama geliştirme. Microcontrollersveya işlemciler yalnızca '0'lar veya 1'ler' biçiminde ikili dili anlayabilir Bir derleyici, derleme dilini ikili dile dönüştürür ve ardındanmikrodenetleyicibelirli bir görevi gerçekleştirmek için bellek.

8051 Mikrodenetleyici Mimarisi

8051mikrodenetleyici... CISC tabanlı Harvard mimarisi ve 32 I / O, zamanlayıcılar / sayaçlar, seri iletişim ve bellekler gibi çevre birimlerine sahiptir.mikrodenetleyicikaydetmek ve işlevleri okumak için bir hafıza gerektiren işlemleri gerçekleştirmek için bir program gerektirir. 8051mikrodenetleyicitalimatları saklamak için RAM ve ROM belleklerinden oluşur.

8051 Mikrodenetleyici Arctitecuture

8051 Mikrodenetleyici Mimarisi

Kayıt, ana bölümdür işlemciler vemikrodenetleyiciler Bu, verilerin daha hızlı bir şekilde toplanmasını ve depolanmasını sağlayan bellekte yer alır. 8051 montaj dili programlaması bellek kayıtlarına dayanmaktadır. Çıkarma, toplama, vb. Gerçekleştirerek bir işlemciye veya denetleyiciye verileri işlemek istiyorsak, bunu doğrudan bellekte yapamayız, ancak verileri işlemek ve depolamak için kayıtlara ihtiyaç duyar.Mikrodenetleyicilertalimatlarına veya içlerinde çalışan içeriklere göre sınıflandırılabilen birkaç tür kayıt içerir.

Assembly Dilinde 8051 Mikrodenetleyici Programları

Assembly dili, tümü programı yazmak için kullanılan öğelerden oluşur.sıralı şekilde. Assembly dilinde programlama yazmak için verilen kuralları izleyin.


Assembly Dili Kuralları

  • Montaj kodu büyük harflerle yazılmalıdır
  • Etiketlerin ardından iki nokta üst üste (etiket :) gelmelidir
  • Tüm semboller ve etiketler bir harfle başlamalıdır
  • Tüm yorumlar küçük harfle yazılmıştır
  • Programın son satırı END yönergesi olmalıdır

Assembly dili anımsatıcıları, işlemleri gerçekleştirmek için kullanılan MOV, ADD, JMP gibi işlem kodu biçimindedir.

Operasyon kodu: İşlem kodu, CPU tarafından yürütülebilen tek bir talimattır. Burada işlem kodu bir MOV talimattır.

Operandlar: İşlenenler, işlem kodu tarafından çalıştırılabilen tek bir veri parçasıdır. Örneğin, çarpma işlemi, işlenenle çarpılan işlenenler tarafından gerçekleştirilir.

Sözdizimi: MUL a,b

Assembly Dili Programlamanın Unsurları:

  • Montaj Yönergeleri
  • Komut seti
  • Adresleme Modları

Talimatları birleştirin:

Montaj yönergeleri CPU'ya yön verir. 8051mikrodenetleyicikontrol ünitesine yön vermek için çeşitli montaj direktiflerinden oluşur. En kullanışlı direktifler 8051 programlamadır, örneğin:

  • ORG
  • DB
  • EQU
  • SON

ORG(Menşei): Bu yönerge, programın başladığını belirtir. Bu, montaj sırasında kayıt adresini ayarlamak için kullanılır. Örneğin ORG 0000h, derleyiciye 0000h adresinden başlayan tüm sonraki kodları söyler.

Sözdizimi: ORG 0000s

DB(bayt tanımla): Tanım bayt, bir bayt dizisine izin vermek için kullanılır. Örneğin, her karakterin adres tarafından alındığı ve son olarak 'dize' yi doğrudan DB tarafından çift tırnaklarla yazdırdığı 'EDGEFX' i yazdırın.

Sözdizimi:

ORG 0000s

MOV a, # 00h
————-
————-
DB 'EDGEFX'

EQU (eşdeğer): Eşdeğer yönerge, değişkenin adresini eşitlemek için kullanılır.

Sözdizimi:

reg eşit,09h
—————–
—————–
MOVreg,# 2h

SON: END yönergesi, programın sonunu belirtmek için kullanılır.

Sözdizimi:

reg eşit,09h

—————–
—————–
MOVreg,# 2h
SON

Adresleme Modları:

Verilere erişim yoluna adresleme modu denir. CPU, adresleme modlarını kullanarak verilere farklı şekillerde erişebilir. 8051mikrodenetleyiciaşağıdaki gibi beş adresleme modundan oluşur:

  • Anında Adresleme Modu
  • Adresleme Modunu Kaydet
  • Doğrudan Adresleme Modu
  • Dolaylı Adresleme Modu
  • Temel Dizin Adresleme Modu

Anında Adresleme Modu:

Bu adresleme modunda, kaynak '#' ile devam edebilecek bir değer olmalı ve hedef, SFR kayıtları, genel amaçlı kayıtlar ve adres. Hafıza kayıtlarındaki değeri anında saklamak için kullanılır.

Sözdizimi:

MOV A, # 20h // Abirakümülatör yazmacı, 20 A // 'de saklanır
MOV R0,# 15 // R0 genel amaçlı bir kayıttır 15, R0 yazmacında saklanır //
MOV P0, # 07h // P0 bir SFR register07'nin P0'da depolanmasıdır //
MOV 20h,# 05h // 20h, 20h'de depolanan 05 yazmacının adresidir //

Eski:

MOV R0, # 1
MOV R0, # 20 // R0<—R0[15] +20, son değer R0 // 'de saklanır

Adresleme Modunu Kaydet:

Bu adresleme modunda, kaynak ve hedef bir kayıt olmalıdır, ancak genel amaçlı kayıtlar olmamalıdır. Böylece veriler, genel amaçlı banka kayıtları .

Sözdizimi:

MOV A, B // A bir SFR kaydıdır, B genel amaçlı bir kayıttır //
MOV R0, R1 // Geçersiz talimat, GPR'den GPR'ye mümkün değil //

ESKİ:

MOV R0, # 02h
MOV A, # 30s
EKLE R0, A // R0<—R0+A, the final value is stored in the R0 register//

Doğrudan Adresleme Modu

Bu adresleme modunda, kaynak veya hedef (veya hem kaynak hem de hedef) bir adres olmalı, ancak değer olmamalıdır.

Sözdizimi:

MOV A,20h // 20h bir adrestir A bir kayıttır //
MOV 00h, 07h // her ikisi de GPS kayıtlarının adreslidir //

Eski:

MOV 07h,# 01h
MOV A, # 08h
EKLE,07h // A<—A+07h the final value is stored in A//

Dolaylı Adresleme Modu:

Bu adresleme modunda, kaynak veya hedef (veya hedef veya kaynak),-edolaylı adres, ancak bir değer değil. Bu adresleme modu, işaretçi konseptini destekler. İşaretçi, diğer değişkenin adresini saklamak için kullanılan bir değişkendir. Bu işaretçi kavramı yalnızca R0 ve R1 kayıtları için kullanılır.

Sözdizimi:

MOVR0, # 01h // 01 değeri R0 yazmacında saklanır, R0 adresi 08h //
MOV R1, # 08h // R1,mağazalarR0 // adresi (08h)
MOV 20h,@ R1 // 01 değeri GP yazmacının 20 saat adresinde saklanır //

Dolaylı Adresleme Modu

Dolaylı Adresleme Modu

Temel Dizin Adresleme Modu:

Bu adresleme modu, verileri cihazdan okumak için kullanılır. harici bellek veya ROM belleği . Tüm adresleme modları, verileri kod belleğinden okuyamaz. Kod, DPTR yazmacından okunmalıdır. DPTR, verileri koda veya harici hafızaya işaret etmek için kullanılır.

Sözdizimi:

MOVC A, @ A + DPTR // C kod belleğini gösterir //
MOCX A, @ A + DPTR // X harici belleği gösterir //
ÖR: MOV A, # 00H // 00H, A yazmacında saklanır //
MOV DPTR, # 0500H // DPTR bellekteki 0500h adresini gösterir //
MOVC A, @ A + DPTR // değeri gönder-eA kaydı //
MOV P0, A // A'nın PO siciline gönderilme tarihi //

Komut seti:

Komut seti, kontrolöre veri işlemek için kılavuzluk etmek üzere kontrolöre komutlar sağlayan kontrolör veya işlemcinin yapısıdır. Komut seti komutlar, yerel veri türleri, adresleme modları, kesme kayıtları, istisnai işleme ve bellek mimarisinden oluşur. 8051mikrodenetleyici Harvard mimarisi ile CISC talimatlarını takip edebilir. 8051'in programlanması durumunda farklı CISC talimatları şunları içerir:

  • Veri Aktarım Talimatı seti
  • Sıralı Komut Seti
  • Aritmetik Komut seti
  • Dallanma ItalimatAyarlamak
  • Döngü Kurulum Seti
  • Koşullu Talimat seti
  • Koşulsuz Talimat seti
  • Mantıksal Talimat seti
  • Boole Komut kümesi

Aritmetik Komut Seti:

Aritmetik komutlar aşağıdaki gibi temel işlemleri gerçekleştirir:

  • İlave
  • Çarpma işlemi
  • Çıkarma
  • Bölünme

İlave:

ORG 0000s
MOV R0, # 03H // 3 değerini R0 yazmacına taşı //
MOV A, # 05H // 5 değerini toplayıcı A'ya taşı //
A, 00H // ekleekleR0 değerine sahip değer ve sonucu saklariçinde//
SON

Çarpma işlemi:

ORG 0000s
MOV R0, # 03H // 3 değerini R0 yazmacına taşı //
MOV A, # 05H // 5 değerini toplayıcı A'ya taşı //
MUL A, 03H //Çarpıldısonuç Akümülatörde saklanır //
SON

Çıkarma:

ORG 0000s
MOV R0, # 03H // 3 değerini R0 kaydetmek için taşı //
MOV A, # 05H // 5 değerini toplayıcı A'ya taşı //
SUBB A, 03H // Sonuç değeri Akümülatör A'da saklanır //
SON

Bölünme:

ORG 0000s
MOV R0, # 03H // 3 değerini R0 kaydetmek için taşı //
MOV A, # 15H // 5 değerini toplayıcı A'ya taşı //
DIV A, 03H // son değer Akümülatör A'da saklanır //
SON

Koşullu Talimatlar

CPU, talimatları tek bit durumunu veya bayt durumunu kontrol ederek duruma göre yürütür. 8051mikrodenetleyiciaşağıdakiler gibi çeşitli koşullu talimatlardan oluşur:

  • JB -> Aşağı atla
  • JNB -> Aşağıda değilse atla
  • JC -> Carry ise Atla
  • JNC -> Atla eğerdeğilTaşımak
  • JZ -> Sıfır ise Atla
  • JNZ -> Atla eğerdeğilSıfır
Koşullu Talimatlar

Koşullu Talimatlar

1. Sözdizimi:

JB P1.0, etiket
- - - - - - - -
- - - - - - - -
Etiket: - - - - - - - -
- - - - - - - -
SON

2. Sözdizimi:

JNB P1.0, etiket
- - - - - - - -
- - - - - - - -
Etiket: - - - - - - - -
- - - - - - - -
SON

3. Sözdizimi:

JC, etiket
- - - - - - - -
- - - - - - - -
Etiket: - - - - - - - -
- - - - - - - -
SON

4. Sözdizimi:

JNC, etiket
- - - - - - - -
- - - - - - - -
Etiket: - - - - - - - -
- - - - - - - -
SON
5. Sözdizimi:

JZ, etiket
- - - - - - - -
- - - - - - - -
Etiket: - - - - - - - -
- - - - - - - -
SON

6. Sözdizimi:

JNZ, etiket
- - - - - - - -
- - - - - - - -
Etiket: - - - - - - - -
- - - - - - - -
SON

Çağrı ve Jump Talimatları:

Programın kod kopyasını önlemek için arama ve atlama talimatları kullanılır. Programın farklı yerlerinde bazı belirli kodlar birden fazla kez kullanıldığında,belirli isim-eo zaman kodlabu adı programın herhangi bir yerinde her seferinde bir kod girmeden kullanabiliriz. Bu, programın karmaşıklığını azaltır. 8051 programlaması LCALL, SJMP gibi arama ve atlama komutlarından oluşur.

  • LCALL
  • BİR ARAMA
  • SJMP
  • LJMP

1. Sözdizimi:

ORG 0000s
- - - - - - - -
- - - - - - - -
ACALL, etiket
- - - - - - - -
- - - - - - - -
SJMP DURDURMA
Etiket: - - - - - - - -
- - - - - - - -
- - - - - - - -
sağ
DUR:HAYIR

2. Sözdizimi:

ORG 0000s
- - - - - - - -
- - - - - - - -
LCALL, etiket
- - - - - - - -
- - - - - - - -
SJMP DURDURMA
Etiket: - - - - - - - -
- - - - - - - -
- - - - - - - -
sağ
DUR:HAYIR

Çağrı ve Atlama Talimatları

Çağrı ve Atlama Talimatları

Döngü Talimatları:

Döngü talimatları, artırma ve azaltma işlemleri gerçekleştirilirken her seferinde bloğu tekrarlamak için kullanılır. 8051mikrodenetleyiciiki tür döngü talimatından oluşur:

  • CJNE -> karşılaştır ve eşit değilse atla
  • DJNZ -> sıfır değilse düşür ve zıpla

1. Sözdizimi:

nın-ninCJNE
MOV A, # 00H
MOV B, # 10H
Etiket: INC A
- - - - - -
- - - - - -
CJNE A, etiket

2. Sözdizimi:

nın-ninDJNE

MOV R0, # 10H
Etiket: - - - - - -
- - - - - -
DJNE R0, etiket
- - - - - -
- - - - - -
SON

Mantıksal Komut Seti:

8051 mikrodenetleyici komut seti, programdaki ihtiyaca göre bitleri ayarlamak için AND, OR, XOR, TEST, NOT ve Boolean mantık talimatlarını sağlar ve temizler.

Mantıksal Komut Seti

Mantıksal Komut Seti

1. Sözdizimi:

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

2. Sözdizimi:

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

3. Sözdizimi:

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

Değişen Operatörler

Vardiya operatörleri, verileri verimli bir şekilde göndermek ve almak için kullanılır. 8051mikrodenetleyicidört vardiya operatöründen oluşur:

  • RR -> Sağa Döndür
  • RRC -> Taşıma ile Sağa Döndür
  • RL -> Sola Döndür
  • RLC -> Taşıma boyunca Sola Döndür

Sağa Döndür (RR):

Bu kaydırma işleminde, MSB, LSB olur ve tüm bitler, seri olarak, bit bit sağ tarafa doğru kayar.

Sözdizimi:

MOV A, # 25 saat
RR A

Sola Döndür (RL):

Bu kaydırma işleminde, MSB LSB olur ve tüm bitler seri olarak Sol tarafa doğru yavaş yavaş kayar.

Sözdizimi:

MOV A, # 25 saat
RL A

RRC Carry ile Sağa Döndür:

Bu kaydırma işleminde, LSB taşımak için hareket eder ve taşıma MSB haline gelir ve tüm bitler, bit konum sağ tarafa doğru kaydırılır.

Sözdizimi:

MOV A, # 27s
RRC A

RLC Carry ile Sola Döndür:

Bu kaydırma işleminde, MSB taşımak için hareket eder ve taşıma LSB olur ve tüm bitler bir bitlik bir pozisyonda sola doğru kayar.

Sözdizimi:

MOV A, # 27s
RLC A

Temel Gömülü C Programları:

mikrodenetleyiciprogramlama, her işletim sistemi türü için farklılık gösterir. Var birçok işletim sistemi Linux, Windows, RTOS ve benzeri gibi. Bununla birlikte, RTOS, gömülü sistem geliştirme için çeşitli avantajlara sahiptir. Montaj seviyesi programlama örneklerinden bazıları aşağıda verilmiştir.

8051 ile yanıp sönen LEDmikrodenetleyici:

  • Sayı 8051 mikro denetleyici kullanarak 7 segmentli ekranda görüntüleme
  • 8051 kullanarak Zamanlayıcı / Sayaç hesaplamaları ve programımikrodenetleyici
  • 8051 kullanarak Seri İletişim hesaplamaları ve programımikrodenetleyici

8051 M ile LED programlarıicrocontrller

1. PORT1 LED'leri arasında geçiş yapmak için WAP

ORG 0000H
TOGLE: MOV P1, # 01 //hareket00000001'den p1 yazmacına //
ÇAĞRI GECİKMESİ // gecikmeyi yürütün //
MOV A, P1 // taşıp1 değeriakümülatöre //
CPL A // tamamlayıcı A değeri //
MOV P1, A // 11111110'u port1 yazmacına taşı //
ÇAĞRI GECİKMESİ // gecikmeyi yürütün //
SJMP TOGLE
GECİKME: MOV R5, # 10H // register R5'i 10 ile yükle //
İKİ: MOV R6, # 200 // 200 ile R6 yazmacı yükle //
BİR: MOV R7, # 200 // 200 ile R7 yazmacı yükle //
DJNZ R7, $ // R7'yi sıfır olana kadar azalt //
DJNZ R6, ONE // sıfır olana kadar R7'yi azalt //
DJNZ R5, İKİ // sıfır olana kadar R7'yi azalt //
GERİ // ana programa geri dön //
SON

8051 M kullanarak Zamanlayıcı / Sayaç Hesaplamaları ve Programıicrocontroller:

Gecikme, uygulama yazılımı geliştirmede önemli faktörlerden biridir. zamanlayıcılar ve sayaçlar donanım bileşenleridirmikrodenetleyici, birçok uygulamada sayım darbeleri ile doğru zaman gecikmesini sağlamak için kullanılan. Bdiğer görevler yazılım tekniği ile gerçekleştirilir.

1. 500us gecikme süresini hesaplamak için WAP.

MOV TMOD, # 10H // kayıtlardan zamanlayıcı modunu seçin //
MOV TH1, # 0FEH // gecikme süresini daha yüksek bit olarak saklayın //
MOV TL1, # 32H // gecikme süresini düşük bit olarak saklayın //
JNB TF1, $ // zamanlayıcının değerini sıfır olana kadar azalt //
CLR TF1 // zamanlayıcı bayrağını temizlebit//
CLR TR1 // zamanlayıcıyı kapat //

2. LED'leri değiştirmek için WAPile5saniyeZaman gecikmesi

ORG 0000H
DÖNÜŞ: MOV PO, # 00H
ACALL DELAY
MOV P0, # 0FFH
ACALL DELAY
SJUMP İADE
GECİKME: MOV R5, # 50H // 50 ile R5 yazma kaydı //
GECİKME1: MOV R6, # 200 // 200 ile R6 yazmacı yükle //
GECİKME2: MOV R7, # 229 // 200 ile R7 yazmacı yükle //
DJNZ R7, $ // R7'yi sıfır olana kadar azalt //
DJNZ R6, DELAY2 // R6'yı sıfır olana kadar azalt //
DJNZ R5, DELAY1 // R5'i sıfır olana kadar azalt //
GERİ // ana programa geri dön //
SON

3. mode0 count0 kullanarak 250 darbeyi saymak için WAP

Sözdizimi:

ORG 0000H
MOV TMOD, # 50H // sayacı seçin //
MOV TH0, # 15 // sayma darbelerini daha yukarı taşı //
MOV TH1, # 9FH //hareketsayma darbeleri, daha düşük bit //
TR0 ayarla // zamanlayıcıda //
JNB $ // sayma değerini sıfıra kadar azalt //
CLR TF0 // sayacı temizle, bayrakbit//
CLR TR0 // zamanlayıcıyı durdur //
SON

8051 M Kullanarak Seri İletişim Programlamaicrocontroller:

Seri iletişim genellikle verilerin iletilmesi ve alınması için kullanılır. 8051mikrodenetleyiciUART / USART seri iletişiminden oluşur ve sinyaller tarafından iletilir ve alınır.Txve Rx pimleri. UART iletişimi, verileri bit bit seri olarak aktarır. UART, verileri aynı anda aktarmayan ve alan yarı çift yönlü bir protokoldür.

1. Karakterleri Hiper Terminal'e iletmek için WAP

MOV SCON, # 50H // seri iletişimi ayarla //
MOV TMOD, # 20H // zamanlayıcı modunu seçin //
MOV TH1, # -3 // baud hızını ayarla //
TR1'i ayarla // zamanlayıcıda //
MOV SBUF, # ’S’ // S'yi seri pencereye iletir //
JNB TI, $ // zamanlayıcının sıfır olana kadar eksiltme değeri //
CLR RI // alma kesintisini temizle //
CLR TR1 // zamanlayıcıyı temizle //

2. Al karakterini Hiper Terminal ile iletmek için WAP

MOV SCON, # 50H // seri iletişimi ayarla //
MOV TMOD, # 20H // zamanlayıcı modunu seçin //
MOV TH1, # -6 // baud hızını ayarla //
SET TR1 // zamanlayıcıda //
MOV SBUF, # ’S’ // S'yi seri pencereye iletir //
JNB RI, $ // zamanlayıcının sıfır olana kadar eksiltme değeri //
CLR RI // alma kesintisini temizle //
MOV P0, SBUF // SBUF kayıt değerini port0'a gönder //
CLR TR1 // zamanlayıcıyı temizle //

Bunların tamamı, örnek tabanlı programlarla kısaca Assembly dilinde 8051 Programlama ile ilgilidir. Assembly dili hakkındaki bu yeterli bilginin kesinlikle okuyucular için faydalı olacağını umuyoruz ve aşağıdaki yorum bölümünde onların değerli yorumlarını bekliyoruz.