8051assembly programlama dili

download 8051assembly programlama  dili

of 41

Transcript of 8051assembly programlama dili

  • 7/31/2019 8051assembly programlama dili

    1/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    81

    Bu blmde 8051 Assembly dilinde program yazabilmek iin gerekli bilgiler yeralmaktadr. Bu dilde yer alan temel komut trleri ayrntl olarak anlatlm, basit

    programlama rnekleri verilmitir.

    5.1. ASSEMBLERA GRAssembly mnemonic olarak adlandrlan komut yaplarndan oluan makine

    kodundan sonra en alt seviyelide yer alan bir programlama dilidir.

    Programlama Dillerine GiriProgramlar drt farkl dilde yazlabilir. Bunlar srasyla, makine kodu, assembly, orta

    seviyeli diller ve yksek seviyeli diller.

    Makine kodu sadece hex formatta hazrlanm sembollerden oluur. Bu nedenleyazm ve tekrar kontrol ilemi ok zordur. Ancak direk altrlabilirler.

    Assembly mnemonic olarak adlandrlan komut yaplarndan oluur. Bu komutlaraklda kalc olduundan makine diline gre yazm ok daha kolaydr. Ancak yazlankodlarn derleme ilemi ardndan makine dilleri karl direk makine diliyle yazlmkarlna ok yakndr.

    Orta seviyeli dillere C dili rnek verilebilir. Burada mnemonicler assemblymnemoniclerine gre daha anlamldr. Bu nedenle kod yazm Assembly e gre daha kolaydr.Algoritmalarn uygulanabilirlii daha fazladr ancak bu algoritmalarn yaplar nceden

    belirlenmi olduundan uygulamada ok fazla esneklik salanamaz.

    ASSEMBLY DLNDEPROGRAMLAMA

  • 7/31/2019 8051assembly programlama dili

    2/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    82

    Yksek seviyeli dillerde kullanm kolayl temel alnmtr. Bu nedenle arayzkullanlarak kullanm kolayl salanmtr. Ancak bu dillerle oluturulan programlargenelde boyut olarak daha byk olurlar.

    5.1.1. ASSEMBLY NEDR, DER PROGRAMLAMA DLLERLE BENZERLKLER VE FARKLILIKLARI

    Assembly makine kodundan sonra en alt seviyeli programlama dilidir. Makine dilineseviye olarak ok yakn olmasna karn yazm kolayl makine diline gre daha fazladr.Makine dilinde komutlar sadece saylardan oluur ve bu hatrlanmas zor, zaman harcayan biritir ancak assembly de komutlar aklda kalacak ekilde ve ksadr. Assembly dilinin dierorta ve yksek seviyeli diller gibi komut says ok deildir ve bu komut yaplar belirli

    hazrlanm formatlarda deildir. Bu nedenle assembly dilinin, dier programlama dillerinegre yaps farkldr.

    Assembly dilinin dier programlama dillerine gre en nemli fark ve avantajlarndanbirisi kullanlan komutlardaki esnekliktir. Yani kullanc yazd komut ve algoritmalara dahahakimdir ve bunu kendi istei dorultusunda dzenleyebilir. Dier st seviyeli programlamadillerinde ise komutlarn belirli bir yaps vardr ve bu ou zaman yazm kolayl salasa dayazm esneklii azalmaktadr. rnein orta seviyeli bir dil olan C ile karlatrlrsa,assembly daha az komut saysna ancak daha geni komut kullanm yapsna sahiptir. Yksekseviyeli diller ile karlatrldnda ise visual tabanl bir programn assembly dilinde yazmdaha fazla zaman alr, ancak assembly dilinde yazlan kodun sadece gerekli olduunda libraryleri kulland ve daha az makine evrimi srd dnlrse assemly dilinin nemianlalr. Yksek seviyeli dillerin yaygn kullanmna karn, halen hzn ve verimin nemliolduu noktalarda yazlan ou programda assembly dili kullanlmaktadr.

    Assembler; yazlan komutlarn birletirilmesi, dzenlenmesi ve makine dilineevrilmesi ilemini yapan evrim programlardr. Assembler sayesinde makine dili bilmedenmakine kodlar kolaylkla oluturulabilmektedir. Assembler program iinde yazm kolaylasndan kullanlan tanmlama ve deikenleri orijinal deerleriyle deitirir bu sayedekodun asl yaps bozulmaz. Assembler lar deiik tiplerde olabilir. Bunlar:

    Self Assembler : Bu assemblerda oluturulan kod ayn sistem zerinde alr. Bu

    nedenle koddan farkl bir makine koduna dnm ilemi iin ek dntrme ilemiyaplmaz.

    Cross-Assembler : Bu Assembler da, oluturulan makine kodu farkl bir sistemdealacandan program kodu bu altrlacak sistemin makine koduna dntrlr.

    Makro-Assembler : Makro assembler lar normal Assembler lardan daha gelimi biryap gsteririler. Bunlar sk kullanlan komutlar baka programlardan arma ve yksekseviyeli dillerdeki gibi kontrol ilemleri gibi ek zellikler sunarlar. Normal Assembler a gredaha fazla kolaylk salamaktadr.

  • 7/31/2019 8051assembly programlama dili

    3/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    83

    Assembler lar genel olarak nce kaynak kod (source code) dosyalarndan ( *.asm *.srcvb ) hareketle list ( *.lst ) dosyalarn olutururlar. List dosyalarnda komutlarn veaklamalarn yan sra opcodelar, yerletirildikleri adresler ve eer varsa hata olan satrlar ilehata trlerine ait aklamalar bulunur. List dosyalarnn oluturulmasnn ardndan budosyalardan object (*.obj ) dosyalar oluturulur. Object dosyalar balanarak ( linking ) tek

    bir makine kodu dosyas oluturulur. Bu balama ileminde tanmlanan ve arlan altprogramlara baklarak alt programlar uygun olan yerlere yerletirilirve makine koduoluturulur.

    Program alma aamasna gelmeden nce birok deiik aamadan geer. Buaamalar srasyla ; dizayn, kodlama, evrim, test, debug olarak ifade edilebilir.

    Bu aamalar

    a

    klamak gerekirse dizaynda istenilen amaca uygun algoritma yap

    s

    oluturulur. Kodlamada ise kullanlan mikroilemci sisteme uygun komutlarla herhangi birtext editr yada assemblerin kendi text editr kullanlarak kodlama ilemi yaplr. evrimileminde yazlan kodlar nce list dosyalarna, ardndan object dosyalarna dntrlr.Debug ileminde ise oluan hatalar ve hata kaynaklar ayklanmaya allr. Debug ilemininardndan yrtlebilir makine kodu oluturulur ve istenilen ilem gerekletirilir.

    5.1.2. ASM51 ASSEMBLER GENEL YAPISI8051 mikrodenetleyici ailesi iin kullanlan ASM51, kullanm kolayl ve modler

    programlamay salayabilmesi asndan hem amatr hem de profesyonel uygulamalar iinyeterlidir. Assembler yada herhangi bir text editrde yazlan kod ASM51 de derlendiktensonra baz ilemlerin ardndan mikrodenetleyici sistemin altrlabilecei hex dosyasnadntrlr. Burada dikkat edilmesi gereken nokta text editrde yazldktan sonra dosyauzants olarak asm (*.asm) eklinde kaydedilmelidir.

    Genelde yazlan kod sadece bir asm dosyasnda tutulur. Ancak istenildiinde dahageni ve ileriye dnk uygulamalar iin alt programlar baka asm dosyalarnda olabilir. Buekilde yazlan alt programlar daha sonra baka uygulamalarda tekrar kolaylklakullanlabilmektedir. Bu ilem iin ana programda baz direktiflerle bu alt programlarkullanlmaktadr. Kod yazma ileminin ardndan derleyici ana ve alt programlar derleyerek

    kod yazm hatalar olup olmadn kontrol ettikten sonra list (*.lst) dosyalarn oluturur.Ardndan bu list dosyalar birletirilerek ana program object (*.obj) dosyas oluturulur. Builemin ardndan assembler bu object dosyasndan 8051 komutlarnn opcode (operation code)larn oluturur. Opcode mikrodenetleyici sistemin yazlmla, komut ilemlerinin donanmtarafndan yrtlebilir hale getirilmi halidir. Yani opcode lar yazlm kodunun makine kodu(machine code) karldr.

  • 7/31/2019 8051assembly programlama dili

    4/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    84

    5.1.3. MAKNE KODU, OPCODE, OPERAND,PROGRAM COUNTER

    Makine kodu, yazlan kodun mikroilemci sistemlerde temel ilemleri yapan ALU(Arithmetic Logic Unit), dier donanm kontrol ve ilem birimleri tarafndan verilen komutuaritmetik ve lojik komutlarla fiziksel olarak gerekletirilmeye uygun halidir.

    Opcode ise yazlmdaki kodun makine kodu karldr.

    E582 ; 82H adresindeki deeri A registerna yazmaya yarayan komut

    Operand koddan sonra o komutun ileminin gereklemesi iin gerekli dierdeikenlerdir.

    ADD A,Operand ;Operand ierisinde yer alan deerile a register;iindeki deer toplanp Anin ierisine yazlr.

    Mikroilemcili sistemlerde kullanlan komutlar uzunluk ve makine evrimi asndanfarkllk gsterirler. Bunun nedeni baz komutlar sadece bir operandla bir ilemigerekletirirken, baz komutlar iki oparandla birden ok makine evrimi kullanarak istenen

    ilemi gerekletirler. Mikroilemci sistemler hangi komutun ne kadar uzunlukta olduunu vebuna gre bir sonraki ileme gemeyi Program Counter yardmyla yaparlar. ProgramCounter sayesinde mikroilemci bir komuttan sonra gelen bilginin operand m yoksa baka birkomut mu olduunu anlayp buna gre ilem yapar. Bu sayede komutlar farkl uzunluktaolsalar bile sorunsuz birekilde altrlabilirler.

    Instruction Register makine kodunun ilenmeye balanmadan nce tutulduu yerdir.Yani ALU ve dier donanm kontrol birimlerinde yrtlmeden nce opcodelarn tutulduuyerdir. Instruction Registerdeki opcode lar daha sonra zmlenerek (decode) istenilen ilemgerekletirilir.

    Mnemonic kodun kullanmna uygun gsterili formatdr.

    5.1.4. PROGRAM KODUAssembly dili ile belirli bir sonuca ulamak iin belirli bir formatta bir araya gelen komutlar

    program kodumuzu oluturur.

    Balk

    Bu ksm programn en st ksmnda bulunur. Burada ksaca programn hangi amaiin yazld en son deiim tarihi gibi sonraki inceleme ve kullanmlar iin kolaylksalayacak bilgiler bulunur. Her satrna noktal virglle baland iin derleme ilemindemakine kodunun oluturulmasnda dikkate alnmaz

  • 7/31/2019 8051assembly programlama dili

    5/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    85

    Tanmlamalar

    Kodun ilk ksmdr, ancak ilk bata oluturulmaz. Burada program yazlrkenoluturulan sabit tanmlamalar, bellek adres tanmlamalar ve programn balang iingerekli tanmlamalar vardr. Program yazlrken zamanla oluan deikenler, sabitler buradayaplan tanmlamalarla programn daha kolay ve okunabilir olmas salanr.

    Kesme servis programlar

    Buras mikrodenetleyici sistemin kulland kesme servis programlarnn, retici firmatarafndan belirlenmi adreslere gerekli alt programlarn yerletirildii ksmdr. Bu adreslernceden belirli olduundan buradaki belirlenen adreslere ORG komutuyla gerekli komutlar

    yerletirilir.

    Ana Program

    Ana program; yazlmn genel ksmdr. Bu ksm dier program bloklar ve yaplarnkullanld, genel kontrol ve dier ilemlerin yapld ksmdr. Program ierisinde yazmkolayl iin kullanlan semboller, modler programlamada kullanlan direktifler ve esaskontrol komutlar ana programda bulunur.

    Ana program mikrodenetleyici sistemin ilk artlandrmalarnn yapld almayahazr hale getirildii konfigrasyon ksmdr. Burada mikrodenetleyici sistemin donanm veyazlm olarak ilkartlandrmalar yaplr. Mikrodenetleyici sistemin giri k birimleriyle

    d sistemlerle etkileimi arttka bu konfigrasyon ksm da artmaya balar.

    Alt programlar

    Alt program ana program tarafndan her zaman kullanlmayan sadece gerektiindearlan komut bloklardr. Okunabilirlik asndan alt programlara, alt programn ileviyleilgili bir etiket verilmelidir. Ayrca alt programlar iin ayn etiketlerinin kullanlmamasnadikkat edilmelidir, aksi takdirde derleme ilemi srasnda assembler hata mesaj verecektir.Alt programlarn sonuna mutlaka RET komutu konulmaldr, aksi takdirde program yanlkomutlar yrtecektir. Alt programlar ana programn sonunda bulunmaldr. Alt

    programlardan sonra ana programn baz ksmlar bulunmamaldr.

    Tablolar

    Aritmetik ve dnm ilemleri iin kullanlan tablolarn oluturduu ksmdr. Butablolar bir etiketle balar ve DB veya DW komutlar yardmyla oluturulur.

  • 7/31/2019 8051assembly programlama dili

    6/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    86

    5.2. DREKTFLERDirektifler Assembler tarafndan dorudan makine koduna eklenmeyen ancak dier

    komut, alt program ve kontrol ifadelerinin ilenmesini salayan komutlardr. Bu komutlarsayesinde assembler makine koduna belirli eklemeler ve deiiklikler yaparak programn dahaetkili ve kolay birekilde oluturulmasn salar.

    EQU

    EQU komutuyla belirli deiken ismi sabit olarak atanabilir. Derleyici EQUkomutuyla tanmlanan btn deikenlere derleme ilemi srasnda tanmlanan sabit deeriniyerletirir. Bylece deikenler makine koduna sabit deerler olarak yerletirilir. EQUtanmlama komutuyla tanmlama yaplrken ayn deiken ismi yalnzca bir kez

    kullanlmaldr. Ayrca EQU komutuyla komut ve direktifler tanmlama iinkullanlmamaldr.

    SAYAC EQU 45HARTIM EQU 32MOV A,SAYAC

    DATA

    Data komutuyla belirli bir adres bir deiken olarak atanabilir. Bylece uzunprogramlarda ok saydaki bellek adresleri bu deiken isimler kullanlarak bellek adreslerikarkl olmadan kolaylkla kullanlabilir. Derleyici DATA komutuyla tanmlanan btndeikenlere derleme ilemi srasnda tanmlanan bellek adresini yerletirir. Bylecedeikenler makine koduna bellek adresleriyle ilem yaplm gibi yansr. Bu komut orta veyksek seviyeli dillerdeki deikenlerin karl olarak dnlebilir. Dikkat edilmesigereken nokta DATA tanmlama komutuyla tanmlama yaplrken ayn deiken ismiyalnzca bir kez kullanlmaldr. Ayrca DATA komutuyla komut ve direktifler tanmlama iinkullanlmamaldr.

    SON_DEGER DATA 45H

    CODE

    Bu komutla belirli bir deiken ismi kod belleindeki bir adres olarak tanmlanabilir.Bylece kod belleindeki bir adres belirli bir deiken olarak kullanlabilir. Yine dierdeiken tanmlamalarna olduu gibi bu deikenlerde derleme ilemi srasnda adres kod

    bellei adres deerleri yazlarak derleyici tarafndan deitirilirler.

    RESET CODE 00HTIMERO_KESMESI CODE 0BH

    SET

    EQU komutu gibi bu direktif de bit tanmlamalar iin kullanlr.

  • 7/31/2019 8051assembly programlama dili

    7/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    87

    FLAG BIT 0

    Sembol Tanmlamalar

    Herhangi bir yerde tanm yada etiket olarak kullanlacak kelimeler en fazla 255karakter olabilir ve bu tanmlamann sadece ilk 31 karakteri dikkate alnr.

    rnein:

    31_karakterden_uzun_tanmlama_isimleri

    ile31_karakterden_uzun_tanmlama_i

    ayndr.

    Sembollerde byk yada kk harf duyarll yoktur. Yani Assembler iin TABLO iletablo ayndr.

    Etiketler

    Etiketler arma ve srama komutlarnda kullanlr. Etiketlerden sonra iki noktaiareti kullanlmaldr. Etiket isimleri sayesinde arma yada srama komutlarnda alt

    programlarn balang adresleri bilinmek zorunda deildir. Derleme ilemi srasnda derleyicietiketten sonra gelen komutun program bellei adresini etiketin isminin getii btn komut

    satrlarna yerletirir. Bylece kullanc komutlarn uzunluklarn ok gerekmedikehesaplamakla uramayacaktr. Etiketler kullanlarak etiketten sonra gelen komutlarn istenenyerde yrtlmesi salanr.

    ALT_PROGRAM:MOV R1,#45HMOV A,@R1DEC DPTRRET

    Not: Alt programlarn sonunda RET komutu unutulmamaldr. Yoksa komut yrtme ilemiaa doru devam eder ve yanl sonular elde edilebilir.

    ORG

    Bu direktif sayesinde bu komutun ardndan gelen kod belirtilen adresten sonra kodbelleine yazlr. Bu komut sayesinde kesme servis programlar donanm reticileri tarafndanbelirlenen adreslere kesme servis alt programlarnn yerletirilmesini salar.

    ORG 001BH ; Timer1 kesme adresiINC 32H ; 32H n ieriini bir arttrMOV A,32H ; 32H akmlatre yazRETI ; kesmeden geri dn

  • 7/31/2019 8051assembly programlama dili

    8/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    88

    Yukardaki rnekte Timer1 kesme servis alt programnda kk bir alt program rneiyazlmtr.

    Not : Kesme servis alt programlarnn uzunluu en fazla 8 byte olmak zorundadr. Eer dahauzun bir servis program yaplacaksa, bu program bir alt program olarak oluturulur ve kesmeservis alt programnda bu alt program arlr.

    ORG 0100HMOV R0,#90HMOV A,@R0

    Bu rnekte ise belirli bir adresten sonra program kodu yazlarak makine kodunun bu adresten

    sonra program belleine yazlmas salanmtr.

    INCLUDE

    Bu direktifle nceden yazlan alt program tekrar yazlmadan bu komutla ana programblounun iine yerletirilir. Bylece srekli kullanlan alt programlar defalarca yazlmakyerine ana programdan INCLUDE komutuyla arlarak program belleine bu komutunardndan yerletirilir.

    #INCLUDE 7_SEGMENT.ASM

    DB

    DB komutu kendisinden sonra gelen deerlerin sadece byte olarak sabitler olduunubelirtir. Bylece bu komuttan sonra gelen karakter belirlenen etiketten sonra programbelleine byte byte yerletirilir ve DPTR registeri kullanlarak buradan okuma yaplabilir. Bukomutla ayrca iki trnak iersine alnan karakter yada karakter dizileri ASCII olarakkaydedilir. ASCII olarak kaydetme ilemi yine derleyici tarafndan derleme ilemi srasndayaplr ve yazlan karakterlerin ASCII karlklar kolaylkla bulunmu olur. Bu ilem seri

    porttan veri gnderirken yada LCD gibi gsterge amal uygulamalarda ok kullanlmaktadr.

    TEK_SAYILAR: DB 1,2,3,5,7,11,13,17,19

    YAZI: DB LCD EKRANINA YAZ

    Ayrca byte ve ASCII veri birlikte de kullanlabilir

    STOK: DB TRANSISTORLER,90,OPAMPLAR,20

    DW

    DW komutu da DB komutu gibi kullanlr, tek fark burada sabitler byte byte deil deWORD olarak yani 16 bit olarak program belleinde saklanmaktadr.

  • 7/31/2019 8051assembly programlama dili

    9/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    89

    TABLO: DW 2004,G, 1900,45,F

    END

    Yazlan btn programlar END direktifi ile bitirilmelidir. Bunun nedenimikrodenetleyici kod belleinde komutlar srayla yrtrken kodun nerede bittiinialglayamaz ve aa doru kod belleindeki deerlere gre ilem yapmaya devam eder.Bylece program belleine yazlan son makine komutundan sonra o adreste bulunan rasgeledeer makine koduymu gibi ilem grr ve bu istenmeyen sonular gzlenmesine nedenolabilir. Ancak programn sonunda tekrar programn bana srama komutu veriliyorsa bukomut kullanlmayabilir de nk mikrodenetleyici hibir zaman belirsiz makine kodlarn

    yrtemez ve bylece istenmeyen sonular gzlenmemi olur. Ancak programn sadece birkez almas isteniyorsa ve sonra ilemleri durdurmas isteniyorsa programn sonuna ENDkomutu eklenmelidir.

    ANA_PROGRAM:END

    Aklamalar

    Aklamalar program tekrar incelendiinde yada bakas tarafndan incelenmesigerektiinde programda kullanlan algoritmalar anlatan ksa ifadelerdir. Komutlardan sonranoktal virgl ( ; ) ile balayan ksmdr. Genellikle programn uzun uzun aklams yaplmaz,sadece o satrdaki ilem bu ilemde ne yapld anlatlmaya allr. Aklamalar noktalvirglle baladndan derleyici bu karakterden sonra karakterleri sadece list ( *.lst )dosyasna ekler, object ( *.obj ) ve hexadecimal ( *.hex ) dosyas nda aklama ksmgrlmez.

    MOV R0,#08H ;ilk deerDONGU:

    MOV A,@R0 ;R0 n gsterdii adresteki sayy;akmlatre ykle

    INC R0 ;R0

    artt

    rCJNE R0,#0E0H,DONGU ;R0 E0 oluncaya kadar ileme devam et

    5.3. 8051 KOMUT SET KULLANIM RNEKLERBu blmde 8051 Assembly dilinde kullanlan komutlar anlatlm ve kullanmlarna

    dair basit programlama rnekleri verilerek aklanmtr.

  • 7/31/2019 8051assembly programlama dili

    10/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    90

    5.3.1.VER TRANSFER KOMUTLARI LE HAFIZA VER AKTARIMI RNEKLER

    Hafza zerinde her hangi bir adresteki verinin bir yerden baka bir yere aktarlmasiin veri transfer komutlar kullanlr. Veri bu komutlarla farkl adresleme modlar ile yerdeitirir.

    5.3.1.1. VED ADRESLEME(IMMEDIATE ADDRESSING MODE)

    Hemen adreslemede gnderilecek veri bir sabitten oluur. Alt programlarda yada genelamal olarak programlarda belirli sabitlere bal olarak program aknn devam etmesi iinhemen adresleme kullanlr. Genellikle bir byte transfer edilir. Ancak iki byte transferingerekli olduu durumlarda DPTR registeryla iki byte transferi yapmakta mmkndr.

    MOV A,#18H ;Akmlatre 18H deerini ykle A

    MOV A,#18 ;Akmlatre 18 deerini ykle

    MOV R0,#4 ;R0 registerna 4 deerini ykle

    MOV PSW,#0 ;PSW registerna 0 deerini ykle

    MOV DPTR,#6500H ;DPTR registerna 6500H deerini ykle

    MOV DPTR,#TABLE ;TABLE etiketindeki bloun adresini ykle

    Not : Son rnek alt programlarda tablo oluturmak, tablodaki bu deerleringerektiinde kullanlmas iin ve bir veri blounun balang adresinin belirlenmesi iinkullanlr.

    5.3.1.2. DORUDAN ADRESLEME(DRECT ADDRESSING MODE)

    Dorudan adresleme modunda i veri veya SFR registerndan yine i veri veya SFRregisterna veri transferi yaplr. Portlar da SFR registernda adreslendii iin bu adreslememodunda portlardan da veri okunup yazlabilir.

    MOV A,70H ;70H adresindeki veriyi akmlatre gnder.

    Dahili RAM

    Akmlatr0EEH 70H

    18 18

    0EEH

  • 7/31/2019 8051assembly programlama dili

    11/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    91

    MOV 60H,A ;Akmlatrdeki veriyi 60H adresine yaz.

    Ayrca program yazarken kullanm kolayl asndan kullanlan Equal tanmyardmyla belirli bir adres kolayca adreslenebilir.

    PORT1 EQU 90H ;Assembler bu tanmdan sonra PORT1 grd; yere 90H deerini yerletirir.

    MOV PORT1,55H ;55H adresindeki veri Port1 den gnderilir.

    5.3.1.3. REGSTER ADRESLEME MODU(REGISTER ADDRESSING MODE)Bu adresleme modunda R0,R1,R2,R3,R4,R5,R6,R7 registerlar kullanlr. R0-R7

    registerlarnn adresleri deikendir. Yani istenirse bu adresler deitirilerek R0-R7registerlar 4 farklekilde konumlandrlabilir. Bunun iin ncelikle PSW registerndaki 4. ve3. bitler ayarlanr. Bu bitlerin varsaylan deeri 00 dr. PSW deki bu iki bit deitirilerek Rregisterlar 32 register gibide kullanlabilir.

    MOV R0,A ;akmlatrdeki veriyi R0a yaz. R0 A

    MOV PSW,#10H ;ikinci bank seilir.

    MOV R4,B ;B akmlatrndeki veriyi R4 registerna yaz.

    5.3.1.4. ZEL REGSTER ADRESLEME MODU(REGISTER SPECIFIC ADDRESSING MODE)

    Baz komutlar sk kullanld iin bu komutlar daha az makine evrimi veya dahakk veri boyutu iin dzenlenmitir. Bu ekilde ok fazla kullanlan komutlar daha verimli

    bir halde gerekletirilir ve ana program sresi ksaltlm olur. Bu adresleme moduna rnekolarak A,R0,R1 registerlarnn kullanld baz komutlar verilebilir.

    MOV A,#76H ;A akmlatrne 76H deerini yaz;bu ilem iin 2 byte;1 makine evrimi gerekmektedir.

    MOV 0E0H,#76H ;A akmlatrnn SFR deki adresi 0E0H dir.;ki komutta ayn ilemi yapmasna karn;bu komut 3 byte 2 makine evrimi srer.

    5.3.1.5. REGSTER DOLAYLI ADRESLEME MODU(REGISTER INDIRECT ADDRESSING MODE)

    97H 97H

  • 7/31/2019 8051assembly programlama dili

    12/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    92

    nceki blmlerde anlatld gibi st veri blgesi iki paradan oluur. Bu iki blgeninayr ayr kullanlabilmesi bu adresleme moduyla gerekletirilir.Ayrca bu adresleme moduyla harici veri yada program blouna okuma ve yazma ilemleriiin eriilebilir.

    MOV R0,78H ;R0 a 78H adresindeki deeri ykle

    MOV @R0,#4 ;R0n gsterdii yere 4 deerini yaz.

    MOV DPTR,#9000H ;DPTR registerna 9000H deerini ykle

    MOVX @DPTR,A ;akmlatrdeki veriyi DPTR registernn;gsterdii yere yaz.

    5.3.1.6. REGISTERNDEKSL ADRESLEME MODU(REGISTER INDEXED ADDRESSING MODE)

    Bu adresleme modu en ok tablo kullanmnda kullanlr.Bunun iin ncelikletablonun adresi program belleinde olduundan 16 bitlik bu tablo adresi DPTR registernayklenir. Ardndan bu tablo deerlerinden istenilen, akmlatr yardmyla okunur ve gerekliilemler yaplr. Aada SAYICI adnda 0-9 sayan bir deikenin ieriini 7-segment LEDdisplayde grntleme alt program rnei verilmitir. Gerektiinde bu alt program arlarakakmlatrdeki say 7-segment LED displaye gnderilir.

    MOV A,SAYICI

    MOV DPTR,# DISPLAY_TABLOSU ;look up table'n balang adresi;DPTR'ye atanr

    MOVC A,@A+DPTR ;A ya tablonun istenen deeri;atanr.

    DISPLAY_TABLOSU: ;Hanede grnecek olan seen;tablodur

    DB 00000000B ;0 GrnrDB 00000001B ;1 GrnrDB 00000010B ;2 GrnrDB 00000011B ;3 Grnr

    DB 00000100B ;4 GrnrDB 00000101B ;5 GrnrDB 00000110B ;6 GrnrDB 00000111B ;7 GrnrDB 00001000B ;8 GrnrDB 00001001B ;9 Grnr

    Bu deerler srasyla 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F deerlerinin 7-segment LEDdisplay iin dzenlenmi halidir.

    Buradaki rnekte tablonun balang adresi

    MOV DPTR,# DISPLAY_TABLOSU

  • 7/31/2019 8051assembly programlama dili

    13/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    93

    komutu ile alnmtr. Bu komut sayesinde tablonun program belleindeki belirli bir adresten

    deil de programn ilerleyen ksmnda yklenerek daha verimli kullanlmas salanmtr. Bukullanmn dnda program

    MOV DPTR,#8100H

    komutu ile direk program belleinden yklenebilir.

    5.3.1.7. YIIN UYUMLU ADRESLEME MODU(STACK ORIENTED ADDRESSING MODE)

    Bu adresleme modunda temel olarak PUSH ve POP yn komutlar kullanlr. Buadresleme modunda dikkat edilmesi gereken nokta yn sisteminin alma mantdr. 8051ailesi mikrodenetleyicilerinde first in- last out sistemi kullanlr. Yani yna ilk gnderilenveri en son kartlr. Bu adresleme moduna rnek aadadr.

    MOV A,12HPUSH ACC..

    POP B

    Not : Burada akmlatrn ACC eklinde gsterimine dikkat edilmelidir.

    PUSH A komutu derleyici taraf

    ndan doru bir komut olarak alg

    lanmaz nk burada zelregister adresleme modu kullanlmtr.

    5.3.1.8. YER DETRME (EXCHANGE) KOMUTLARIYer deitirme komutu herhangi bir adresle akmlatr arasnda veri deiimi

    eklinde olur. Burada deiim ilemi direkt yaplmaktadr, yani akmlatrn baka bir yeregeici olarak kopyalanmasna gerek yoktur. Burada dikkat edilmesi gereken nokta kaynakdorudan yada dolayl adreslenmi herhangi bir adres olabilir ancak hedef her zamanakmlatrdr. Ayrca bu komut yapsnn iersinde nibble tamaya zel ek bir komutvardr.Bu komut ile akmlatrn dk anlaml nibble (drt bit) ile dier operandn dk

    anlaml nibble yer deitirir. Yksek anlaml nibblelar bu deiimden etkilenmez.Bu ekkomut BCD ( Binary Coded Decimal ) ilemlerinde kolaylk salamaktadr. Komutlarnkullanmna rnekler :

    MOV A,#023HMOV B,#045HXCH A,B ;Bu ilemin ardndan artk Ada 45H, Bde 23H

    ;deeri olur.

    MOV R0,7FH ;Bu ilemin ardndan 7FH adresindeki dk anlamlXCHD A,@R0 ; nibble ile akmlatrdeki dk anlaml

    ;nibble yer deitirir.

  • 7/31/2019 8051assembly programlama dili

    14/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    94

    5.3.1.9. BT TRANSFER KOMUTLARI(BIT ORIENTED DATA TRANSFER)

    8051 ailesi mikrodenetleyicilerin gl zelliklerinden birisi de bit ilemleri

    yapabilmesidir. Bit ilemleri kontrol amal

    uygulamalarda sadece belirli bir pinin yadabayran kontrol ve transferi iin programlarda byk bir esneklik ve kolaylk salar .rnein bir butonun konumu bu komutlarla rahatlkla kontrol edilebilir. Ayrca portlardakiherhangi bir bitin kontrolyle sisteme balanan bir birim kontrol edilebilir. Bit ilemekomutlarnda unutulmamas gereken bir nokta ise SFR registerlarndan sonu 0 veya 8 ile bitenadreslerin bit bit kontrol edilebileceidir.Yani bu adreslerden bit okuma ve yazma ilemleriyaplabilir. Ayrca 20H-2FH arasndaki 16 byte lk blgede bit olarak adreslenebilmektedir.Bu bit adresleme yntemi aada aklanmtr.

    i : 20H ve 2FH arasndaki adresj : 0. ve 7 . bitlerBit adres = 8 x ( i 20H ) + j

    Buradan 16 byte lk blge 00H-7FH olarak bit adreslenmitir.

    Bu komutun ve bit adreslenebilir blgenin kullanmna rnek :

    MOV C,45H ;45H adresindeki bit elde bayrana alnmtr

    JC ALTPROG ;elde set edilmise ALTPROG a git

    JNB 16H,ALTPROG2 ;16Hadresindeki bit set edilmemise ALTPROG2e;git

    5.3.2.VER LEME KOMUTLARI LE HAFIZA VER AKTARIMI RNEKLER

    Veri ileme komutlar aritmetik ve lojik ilemler olarak iki blm halindeincelenebilir.

    5.3.2.1. ARTMETKLEMLERBu blmde toplama-karma, arpma-blme gibi aritmetik ilemlere ait komutlar

    aklanacaktr.

    5.3.2.1.1. TOPLAMA VE IKARMA LEMLER

  • 7/31/2019 8051assembly programlama dili

    15/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    95

    Toplama lemi:

    8051 komut setinde iki ayr toplama ilemi komutu vardr, ADD ve ADDC. Bunlarsrasyla toplama ve elde ile toplama komutlardr. Her iki komutta da iki byte toplanaraksonu akmlatrde saklanr. ADD komutu; akmlatr ve herhangi bir adresteki saynntoplanarak sonucun akmlatre saklanmasn salar. ADDC ise normal toplama komutunaek olarak elde bayrandaki bitin de toplamaya katlmasn salar. Her iki toplama komutundada 3 bayrak sonutan etkilenir. Bunlar; elde, yarm elde ve tama bayraklardr. Elde bayrakan sonutan elde oluuyorsa set edilir. Yarm elde bayra ise toplanan saylardaki dknibble lardan tama oluuyorsa set edilir. Yarm elde BCD saylarla yaplan ilemlerdekolaylk salamaktadr. Tama bayra ise 6.bitlerin deil de sadece 7. bitlerin toplamndan

    elde oluuyorsa set edilir, veya 7. bitlerin deil de sadece 6. bitlerin toplam

    ndan tamaoluuyorsa set edilir. Bu tama bayra iaretli saylarla yaplan ilemlerde toplanan saylarniareti dikkate alnarak toplama ileminin yaplmasn salar.

    Bu komutlarn kullanmna rnekler :

    MOV A,#03ADD A,#04 ;bu komutun ardndan artk

    ;akmlatrde 07 deeri olur.MOV 78H,#02ADD A,78H ;akmlatrde 09 deeri olur.

    78H -79H ve 7AH-7BH adreslerindeki ikier byte lk saylarn toplam....MOV 78H,#34HMOV 79H,#12HMOV 7AH,#0EFHMOV 7BH,#12H

    MOV A,78HADD A,7AH ;bu ilemin ardndan 78H de 23H deeri oluur

    ;ve eldeMOV 78H,A ;bayra set edilmi olurMOV A,79HADDC A,7BHMOV 79H,A ;bu ilemin ardndan 79H de 25H deeri oluur

    ....

    karma lemi:

    Toplama ileminin aksine karma iin sadece SUBB komutu mevcuttur. Subtractwith Borrow kelimelerinin ksa ifadesi olan bu komutta Carry Elde biti, Borrow - Bor

    biti olarak deerlendirilir.

    karma ileminde de toplama ileminde olduu gibi sonu yine akmlatrdesaklanr. Akmlatrdeki saydan herhangi bir adresteki say karlarak sonu akmlatre

    yazlr. karma ileminde akmlatrdeki deer dier saydan kkse elde biti set

  • 7/31/2019 8051assembly programlama dili

    16/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    96

    edilerek ilem srasnda eldenin dn alnd belirtilir. Bu zellik oklu karmailemlerinde kolaylk salamaktadr. Eer eldeli karma yaplmas istenmiyorsa, yani birdenfazla bytedan oluan iki deiken zerinde karma yaplmyorsa, elde bitinin ncekideerinin karma sonucunu etkilememesi iin elde biti temizlenir (CLR C).

    Yarm elde bayra da toplamada olduu gibi BCD saylarla yaplan ilemlerdekullanlr. Akmlatrdeki saynn dk nibble kan saydan kkse yarm elde bayraset edilir. Yine tama bayra da toplamada olduu gibi iaretli saylarla yaplan ilemlerdesaylarn iaretlerini korumas iin kullanlr. Yani tama bayra 6. bitlerin deil de 7. bitlerinyada 7. bitlerin deil de 6.bitlerin karma ileminden dolay elde ihtiyac oluuyorsa setedilir. karma ilemine rnek aadadr:

    Hatrlatma: karma ileminden nce gerektiinde elde bayra temizlenmelidir.

    78H ve 79H adreslerindeki iki byte uzunluundaki saydan 7AH ve 7BHadreslerindeki saynn kartlmas

    .....

    MOV 78H,#12HMOV 79H,#34HMOV 7AH,#11H

    MOV 7BH,#35HCLR C

    MOV A,79H ;Bu ilemin ardndanSUBB A,7BH ;Akmlatrde #0FFH deeri oluurMOV 7DH,A ;elde bayra (Carry flag) set deerini alr.

    MOV A,78HSUBB A,7AH ;karma esnasnda Carry biti de dikkate alndn-MOV 7CH,A ;dan sonu 00H olarak deeri olarak elde edilir......

    5.3.2.1.2. ARPMA BLME LEMLERarpma ve blme ilemleri mikrodenetleyiciler iin fazla makine evrimi isteyen

    komutlardr. Bu nedenle arpma ve blme ilemleri iin ekstra donamm yaplar kullanlarakbu ilemlerin sresi ksaltlmaya allr. 8051 ailesi mikrodenetleyicilerinde bu donanmvardr ve arpma ve blme ilemleri her biri 4 makine evrimi srer. Bu srenin azaltlmasaritmetik ilemlerin ok kullanld uygulamalarda genel program sresini oldukaksaltmaktadr. arpma ve blme ilemlerinde adresleme modu zel register adreslememodunda olduundan saylar A ve B akmlatrlerine yklenmelidir.

    arpma ileminde arplacak 8 bitlik iki say nce A ve B akmlatrlerine yklenir.arpma komutunu ardndan yksek arlkl byte B akmlatrnde dk arlkl byte ise A

    akmlatrnde saklanr. Ancak burada arpm sonucunun FFFFH deerini gememesine

    78H 79H

    12H 34H

    7AH 7BH

    11H 35H

    7CH 7DH

    00H FFH

  • 7/31/2019 8051assembly programlama dili

    17/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    97

    dikkat edilmelidir. Bu nedenle bu ilemde elde bayra hibir zaman set edilmez. Sonu eerFFH deerinden bykse tama bayra set edilir.

    Blme ileminde ise blnecek 8 bitlik say nce A akmlatrne yklenir ardndanB akmlatrne blen say yklenir. Blme ileminin ardndan tam ksm A akmlatrndekalan ise B akmlatrnde saklanr. Blme ileminden sonra elde bayra her zamantemizlenir sadece tama bayra 0 ile blme ilemi oluursa set edilir. B akmlatrne eer 0ile blme iin 0 yklenirse akmlatrlerdeki sonu rasgele deerlerdir. Bu nedenle yazlan

    programlarda B akmlatrnde blme ileminden nce 0 deeri olmamas salanmaldr.

    arpma ve blme ilemlerine rnek aadadr:

    MOV A,#99 ;99 x 5 = 495 = 1EFHMOV B,#5

    MUL AB ;bu ilemin ardndan A akmlatrnde #0EFH;B registerinde ise #01 deeri oluur.

    MOV A,#99 ;99 / 5 = 19 x 5 + 4MOV B,#5DIV AB ;Bu ilemin ardndan A akmlatrnde 13H

    ;ve B akmlatrnde 4 deeri oluur

    5.3.2.1.3. ARTTIRMA-EKSLTME LEMLERProgramlarda genel olarak herhangi bir adresteki verinin arttrlmas ve azaltlmas

    INC ve DEC komutlaryla gerekletirilir. Bu komutlar sayesinde herhangi bir adrese yada

    veri blouna arttrma ve azaltma komutlaryla eriilebilir. Bu eriim iin bir alt programyazlabilir ve gerektiinde bu alt programla istenilen adrese eriilebilir. Bunun iin R0-R7registerlarna ncelikle bloun adresi yazlr ardndan dolayl adreslemeyle bu adresin ilk

    blouna ulalr ve arttrma azaltma komutuyla R0-R7 registerlar azaltlarak ileme devamedilir. Alt programn sonuna bir kontrol komutu konularak belirli bir deere kadar bu ilemintekrarlanmas salanabilir. Aada 70H-77H adreslerindeki saylarn birer arttrlarak 80H-87H adreslerine yerletiren bir alt program rnei vardr:

    ALT1:

    MOV R0,70H ;kaynak blgesinin ilk adresi yklenir sonucunMOV R1,80H ;yazlaca blgenin ilk adresi yklenir 77H

    DONGU: ;deerine kadar ileme devam edilmesi iinINC @R0 ;R0 n gsterdii yeri bir arttrMOV A,@R0 ;bu deeri akmlatre ykleMOV @R1,A ;Akmlatrdeki deeri R1 in gsterdii yere yazINC R0 ;bir sonraki adrese gitINC R1 ;bir sonraki deere gitCJNE R0,78H,DONGU ;77H deerine kadar ileme devam etRET ;alt programdan k

    Not: Azaltma komutunda dikkat edilmesi gereken nokta azaltlacak adresteki saynn

  • 7/31/2019 8051assembly programlama dili

    18/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    98

    00H olmamasdr. erii 00H olan adresteki say azaltma komutuyla adreste FFH deerioluur.

    5.3.2.1.4. ON TABANINA GRE AYARLAMA(DECMAL AYARLAMA)

    On tabanna gre ayarlama ilemi BCD saylarla toplama ilemi yapldnda oluansonucunda BCD olmas iin tek komutluk bir ayarlama ilemi yapar. Burada toplamaileminde dk arlkl nibble lar toplanrken sonu 9 deerinden tayorsa bir st nibbletoplamna sonu eklenir. Eer bu st nibble larn toplamndan da tama oluuyorsa elde

    bayra set edilir. Bu ekilde BCD iki say toplandktan sonra on tabanna evirmek iin dahafazla ilem yaplmamas salanm olur.

    Not1: Onluk ayarlama ileminden nce elde bayra set edilmise bu elde dkarlkl nibble larn toplamnda toplamaya katlr.

    Not2: BCD deerler arttrma yada azaltma komutlaryla ilem yapldnda 9deerinden A,B,C,D,E,F ye tama veya 0 dan azaltma ilemiyle A,B,C,D,E,F e tamahatalar oluur. Bunun yerine arttrmak iin 01, azalmak iin 99H ile toplanp ardndan DA Akomutuyla tekrar BCD ekline getirilirler.

    Akmlatrde ve R0 da BCD olarak 48 ve 63 deerleri olsun. Bu saylar 58H ve 63Holarak registerlara alndktan sonra toplama ilemi yaplr. Akmlatrdeki deer CBH dir.DA A komutuyla onluk tabana ayarlandktan sonra akmlatrde 21 deeri oluur ve elde

    bayra set edilir yani sonu 121 dir.

    5.3.2.2. LOJKLEMLERMikrodenetleyici sistemlerde sklkla kullanlan lojik ilemler burada aklanmaktadr.

    5.3.2.2.1. AND, OR, XORLEMLERBu komutta dorudan, dolayl ve dier register adresleme modlarn kullanr.

    Ancak bu komutlarda bir ilem eleman ve akmlatr kullanlr. VE ve VEYA genelde bazbitleri okumak veya deitirmek ilemleri iin maskeleme ileminde kullanlr. Bu yntemle

    bit olarak adreslenemeyen adreslerdeki verilerde bit olarak istenilen deiiklikler yap

    labilir.Aada bu ilemlere ait rnekler verilmitir.

    MOV A,#18HORL PSW,A ;Bu ilemin ardndan PSW registerndaki 3. ve 4. bitler

    ;ilk durumlarna baklmakszn set edilmilerdir.

    Port1 e balanm 8 led lojik ilemlerle yaklmaktadr.

    MOV P1,#10101010b ;srasyla 2,4,6,8 numaral ledler yaklmaktadr.MOV A,#0FHANL P1,A ;1, 2, 3, 4 numaral ledler yaklmaktadr.

  • 7/31/2019 8051assembly programlama dili

    19/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    99

    5.3.2.2.2. TMLEME-TEMZLEME LEMLER(COMPLEMENT,CLEAR)

    Bu komutlarda zel register adresleme kullanlr. Elenii alma seilen adresteki btnbitlerin eleniini alr, temizleme ilemi ise seilen adresteki bitler temizlenir yani o adrese00H deeri yazlr.

    MOV A,#0AAHCPL A ; btn bitlerin elenii alnr.

    CLR A ; btn bitler temizlenir.

    5.3.2.2.3. DNDRME-TELEME LEMLER (Rotate-Shift)Dndrme ilemi zel register adresleme modunu ve sadece akmlatr kullanlr.

    Dndrme ilemleri iin drt komut vardr: Sola ve saa teleme, sola ve saadndrme.Srasyla bir sola dndrme ilemiyle say 2 ile arplm olur.Bu ilem iin endk arlkl bite 0 yazlr. Saa dndrme ileminde ise kalan dikkate alnmakszn say 2ile blnm olur. Elde ile sola dndrme ileminde ise elde bayrandaki bit en dkarlkl bit olacak ekilde sola kaydrma ilemi oluur. En arlkl bit ise elde bayranageer. Bu komuttan nce elde bayra kontrol edilmelidir. Elde ile saa kaydrma ilemindede nce eldedeki bit en arlkl bit olacak ekilde saa kaydrma ilemi olur. En dkarlkl bit ise elde bayrana geer. Bu ilemden ncede elde bayra kontrol edilmelidir.

    MOV A,#60H ;bu ilemin ardndan akmlatrde 30H says oluurRR A ;say ikiye blnmtr.

    MOV A,#13HRL A ;ilemin ardndan akmlatrde 26H says oluur.

    ;say ikiyle arplmtr.

    MOV A,#21HSETB C ;eldeyi set et .elde en arlkl bit olur saaRRC A ;kaydrma ileminin ardndan en dk arlkl

    ;bit eldeye geer,akmlatrde 90H deeri oluur;ve elde set edilir.

    Carry

    5.3.2.2.4. SWAP (Yksek ve dk 4 bit in (nibble) yerdeitirmesi)

    0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0

    0 0 0 1 0 0 1 1 0 0 1 0 0 1 1 0

    0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0

  • 7/31/2019 8051assembly programlama dili

    20/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    100

    Bu ilemde sadece zel register adresleme modunu kullanr. Bu komutun ardndanakmlatrdeki nibble lar baka lojik hibir ilem yapmadan deitirilmektedir. Bu komutASCII karekterlerine dntrme ilemi iin kullanlan bir komuttur.

    MOV A,#18H

    SWAP A ;bu komutun ardndan akmlatrde 81H says oluur.

    5.3.2.2.5. BT-ORIENTED LOJKLEMLERLojik bit ilemleri bit olarak adreslenebilen herhangi bir adresteki bir bitle ilem

    yapmak iin kullanlabilir. Bu komutlarla eleniini alma, temizleme, set etme, VE ve VEYAilemleri uygulanabilir. VE ve VEYA ilemlerinde ilk ilem eleman ve hedef elde bitidir.Ancak bu ilemin ardndan elde biti istenilen yere yazlabilir. Bu komutlarda dikkat edilmesigereken zel register adresleme modu kullanlddr. Burada akmlatr A ile deil de ACCeklinde gstermek gereklidir. Bu komutlarn kullanld rnekler aadadr:

    CLR A ; akmlatr temizleSETB ACC.0 ; akmlatrn en dk bitini temizle

    SETB C ; eldeyi set etORL C,/ACC.0 ; elde ile akmlatrn en dk bitinin eleniine

    ; veya ilemi uygula sonucu eldeye yaz

    5.3.3. PROGRAM AKII KONTROL KOMUTLARIKULLANIMIBuraya kadar adresleme modlar, aritmetik ve lojik ilemler anlatlmaktadr. Ancak bu

    komutlarla programlarda olmas gereken kontrol ve bu kontrol ilemlerine gre dier ilemleryaplamaz. Bu nedenle programlarda belirli yerlerde kontroller, bu kontrollerle alt programarma ve srama komutlar gereklidir. Bu komutlar sayesinde belirli koullara gresramalar ve dng ilemleri yaplabilir. Ayrca bu komutlar sayesinde mikrodenetleyici dsistemlerle etkileime geebilmektedir. rnek olarak seri olarak veri gndermek gerektiindeveri ncelikle seri veri tamponuna alnr ve bit olarak gnderilir. Burada veri gnderimi bittii

    zaman SFR deki seri veri iletiim arabirimindeki bir bit set edilir. Kk bir alt program ve bualt programn iindeki kontroll bir dng yardmyla seri veri tamponundaki veri gnderilenekadar ilem beklenir.

    Srama ve dallanma komutlarnda imdiye kadar anlatlan komutlarda kullanlmayanbir yap kullanlr. Bu komutlarla PC ( Progaram Counter ) registerna dorudan veri yazlr.imdiye kadar anlatlanlarda ise PC mikrodenetleyici i kontrolryle komutlara grearttrlr, srama ve dallanma komutlarnda ise gidilecek program adresi yada etiketindekiadres yazlr.

    Programlarda sklkla kullanlan ORG ( ORIGIN ) komutuyla ORG komutundan

    sonraki komutlarn bu adresten sonra program belleine yerletirilmesi salanr. Ayrca

  • 7/31/2019 8051assembly programlama dili

    21/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    101

    ORG komutuyla Timer ve dier kesme alt programlarnn reset kesme adresleri belirlenmiolur. ORG komutunun bunlarn dnda program ierisinde kullanlmas durumunda programhafzasnda bo blgeler oluur ve boyut olarak byk programlarda yer sorununa neden olur.Bu nedenle programlarda ve alt programlarda etiket kullanmak program hafzasnn verimlikullanm iin nemlidir.

    5.3.3.1.KOULSUZ DALLANMALARBu komutlarda PC a gidilecek olan adres yazlr ve mikrodenetleyici bu adresteki

    komutu ve sonraki komutu yrtmeye balar. Bu komutlarda herhangi bir koul olmaksznsrama yaplr. Drt farkl komut vardr: Ksa, mutlak, uzun ve indeksli srama komutu.Ksa srama komutunda 127 byte ileri veya 128 byte geri srama yaplabilir. Mutlak

    s

    ramada ise gidilecek yerin adresi 11 bittten oluur, yani 2 kbyte l

    k blokluk programblgesinde herhangi bir yere srama yaplabilir. Uzun atlama komutuyla ise adres bilgisi 16bittir ve bu 16 bitle 64 kbyte program hafzasnda istenilen yere srama yaplabilir. ndeksliatlama ise nemli bir atlama komutudur. Bu komutla ncelikle DPTR registerna atlanacaktablo yada blgedeki ilk adres yazlr ve ardndan akmlatrle indeksleme yaplarakA+DPTR adresindeki komuta srama yaplr. ndeksli srama ve dier koulsuz sramakomutlarna rnekler aadadr:

    MOV A,40H ; Not: burada 40H nceden baka bir programMOV DPTR,#TABLE ; tarafndan belirli bir say iermektedirJMP @a+DPTR

    TABLO:LJMP ALT_1 ; ilk alt programa sraLJMP ALT_2 ; ikinci alt programa sraLJMP ALT_3 ; .........LJMP ALT_4LJMP ALT_5.......

    ALT_1:MOV P1,#0AAH ; P1 e AAH deerini yolla ilk komutunAJMP DEVAM ; ardndan alt programn sonuna git

    ALT_2:MOV P1,#02HAJMP DEVAM

    ALT_3:MOV P1,#4BHAJMP DEVAM

    ALT_4:MOV P1,#12HAJMP DEVAM

    ALT_5:MOV P1,#56HAJMP DEVAM

  • 7/31/2019 8051assembly programlama dili

    22/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    102

    ............

    DEVAM:.........

    5.3.3.1. KOULLU DALLANMALARBu komutlarla belirli koullara gre belirli ilemlerin yaplmas salanr. Elde,

    akmlatr yada herhangi bir adresteki bit veya byte koullarna uygun olarak srama yaplr.Bu komutlarla programlarda istenilen kontroller salanarak programn daha etkin olmassalanr.

    Koullu srama komutlarnda aranan koul gerekleiyorsa program belirlenen adrese

    srama yapar, eer koul gereklemiyorsa program bir sonraki komuttan devam ettirilir.Koul salanrsa komutla birlikte verilen etiket yada program adresi PC ye aktarlr ve

    program bu adresteki komutlar yrtmeye balar.Koullu srama komutlar yap olarak ikiye ayrlabilir;

    1 - Eldenin, akmlatrn yada belirli bir bitin durumuna gre s rama ve belirli biradresteki sayy girilen deere gre karlatrma.

    2 - Azaltarak karlatrma ilemine gre srama olarak ayrlabilir.

    lk komutlar bitlerin set yada temizlenmesine gre srama yaparken ikinci komutyaplar byte larn adreslerdeki verilerle karlatrlp srama yaplmasn salar. Bu ikincikomut yaplar yksek seviyeli dillerdeki for ve while dnglerindeki gibi belirli kontrolleregre belirli sayda evrim alt programlar altrabilirler. Aada P1.0 a bal olan bir led 12Mhz kristal bal bir sistemde yaklak bir saniye aralklarla yanp snmektedir.

    ORG 1000H

    CLR P1.0BASLA:

    MOV R0,#0FFH ;254 x 254 x 15 = 967740 mikro saniye beklemeMOV R1,#0FFH ;alt programMOV R2,#10H

    BEKLE_1:DJNZ R0,BEKLE_1DJNZ R1,BEKLE_1DJNZ R2,BEKLE_1CPL P1.0SJMP BASLA

  • 7/31/2019 8051assembly programlama dili

    23/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    103

    5.3.3.2. ALT PROGRAM AIRMALARarma komutlar alt programlarda ok nemli kullanm alanna sahiptir. Bu arma

    komutlar sayesinde gerekli olduu yerde alt programlar arlarak bu alt programlaraltrlp alt program bittikten sonra ise ana programa tekrar dnlr. arma komutlar ikitanedir : Mutlak ve uzun arma komutlar

    Mutlak arma komutunda arlan alt programn adresi 11 bittir, yani 2 kbyteprogram blou ierisindeki herhangi bir yerden alt program arlabilir. Uzun armakomutta ise arlan alt programn adresi 16 bittir ve 64 kbyte program hafzas ierisindeherhangi bir yerden alt program arlabilir.

    Alt programlar

    n ar

    lmas

    ileminde alt program adresi PC ye yklenmeden nce16 bitlik PC registernn nce yksek sonra da dk byte yna itilir. PC yna itildiktensonra gidilecek yerin adresi PC registerna yklenir. Burada unutulmamas gereken bir noktaetiket kullanarak komut yrten dier komutlarda olduu gibi burada da etiketin olduu adresderleme ilemi srasnda belirlenir ve o etiketin kullanld btn yerlere etiketten sonraki ilkkomutun program hafzasndaki adresi yazlr.

    Alt programlardan klp tekrar ana programa dnlmesi iin alt programlarn sonunaRET komutu yazlmaldr. Eer RET komutu alt programlarn sonuna yazlmazsa programaa doru devam eder ve hatalar oluur. Ayrca kesme alt programlarnda da benzer olarakRETI komutu kullanlr. Bu komutun RET komutuna gre fark bu komutla mikrodenetleyici

    bir kesme servis alt program ilemi yrttn ve bu ileme ait alt programngerekletirildiini belirten bayraklarn set yada temizlenmesidir. RET yada RETI komutuylayndan PC n nce dk arlkl byte sonrada yksek arlkl byte alnr ve PC bukorunmu deerlere gre ilemleri yapmaya devam eder. Bir nceki rnek bana bir etiketkonup sonuna da RET konursa ve ksa srama komutu kaldrlrsa ledi yaklak bir saniyearalklarla yanp sndren bir alt program yazlm olur ve istenildii zaman arlabilir.

    ORG 1000HBASLA:

    CLR P1.0MOV R3,#08 ;8 defa ilemi tekrarla

    LED:ACALL LED_1 ;led yakp sndrme alt programn arDJNZ R3,LED ;led etiketine giderek 8 defa ilemi tekrarlaSJMP BASLA ;ilem bittiinde yanp snme ilemi

    ;tekrar iin ileme;devam et

    LED_1:MOV R0,#0FFH ;254 x 254 x 15 = 967740 mikro saniyeMOV R1,#0FFH ;bekleme alt program

    MOV R2,#16H

  • 7/31/2019 8051assembly programlama dili

    24/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    104

    BEKLE_1:

    DJNZ R0, BEKLE_1DJNZ R1, BEKLE_1DJNZ R2, BEKLE_1CPL P1.0RET

    5.4. 8051 KOMUT SET KULLANIMINA DARTEMEL PROGRAMLAMA RNEKLER

    Assembly Dili Program rnekleri:

    Buraya kadar anlatlan komut yaplar kullanlarak farkl birok program rneiverilecektir. Bu kodlar ve yaplacak gerekli deiikliklerle anlatlacak rnekler 8051mikrodenetleyicisi ile yaplabilecek birok uygulama iin yeterli ve yol gsterici olacaktr.Program rneklerinin birer alt program olabilmesi iin bana bir etiket konmaldr ve kodunsonuna ret komutu eklenmelidir.

    Yazlan programlarda kod hatas olmamasna ramen bazen program istenildii gibi

    yada tam olarak almaz. Bunun sebebi genellikle komut yaplarnn yanl kullanm ve altprogramlarda register deerlerinin deimesidir. Bu hatalar azaltmak iin ncelikle komutyaps iyice anlaldktan sonra program yazm aamasna geilmelidir. Program ierisinderegister deerlerinin deiimini nlemek iinse iki yol uygulanabilir. Birincisi alt programagirmeden nce alt programda kullanlacak registerlarn yna itilmesi ikincisi ise alt

    programn iinde deeri deien registerlarn yna itilmesidir. Birinci yntem alt programayn ak ierisinde birok defa arlyorsa verimli olabilir. Burada registerlar ana programda

    bir kez yna itilmekte ve alt programlar bittikten sonra tekrar yndan geri ekilmektedir.Bu yntem sayesinde tekrarlanan alt programlarda her defasnda registerlarn yna itilipsonra alt program sonunda tekrar yna ekilmesi ve mikrodenetleyicinin yn ilemleri ilezaman kaybetmemesi salanmaktadr.

    kinci yntem ise program ak ierisinde deeri deien registerlarn alt programnbanda yna itilmesi ve alt program sonunda yndan ekilmesidir. Bu yntemin avantajsadece o alt programda deien registerlar yna itilmektedir. Ancak bu yntemin verimliolabilmesi iin o alt programn ok fazla arlan bir alt program olmamas gerekir. Bu ikiyntem programn yapsna gre uygun bir ekilde kullanlarak register deerlerininkorunmas salanabilir.

    Burada anlatlan rneklerde registerlarn yna itilmesi nemli olmayan durumlardnda yaplmayacaktr. Bu nedenle buradaki alt programlarn kullanmndan nce registerlar

    y

    na itilmeli ve alt program sonunda tekrar y

    ndan ekilmelidir.

  • 7/31/2019 8051assembly programlama dili

    25/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    105

    5.4.1. MATEMATKSEL LEMLER8051 komut setinde aritmetik ilemleri gerekletiren komutlar kullanlrak yaplmtr.

    5.4.1.1. BYTE LIK DEKENN TOPLAMINI HESAPLAYANPROGRAM

    ;SORU: 3'er byte lk iki deikenin toplanarak;sonucun 4 bytelk bir deiken iine atand bir program yaznz

    ;lk say(ILK_SAYI_0/1/2) 06DH-06FH adres aralna,

    ;ikinci say

    (IKINCI_SAYI_0/1/2) 06AH-06CH adres aral

    na;sonuc (SONUC_0/1/2/3) 066H-069H adres aralna yerletirilmitir.

    ILK_SAYI_0 DATA 6FH ;ilk saynn deerILK_SAYI_1 DATA 6EH ;deikenleriILK_SAYI_2 DATA 6DH

    IKINCI_SAYI_0 DATA 6CH ;ikinci saynn deerIKINCI_SAYI_1 DATA 6BH ;deikenleriIKINCI_SAYI_2 DATA 6AH

    SONUC_0 DATA 69H ;sonucun deerSONUC_1 DATA 68H ;deikenleri

    SONUC_2 DATA 67HSONUC_3 DATA 66H;-----------------------------;basit toplamada olduu gibi iki saynn en kk;ksmlar toplanr

    MOV A,ILK_SAYI_0ADD A,IKINCI_SAYI_0JNC TPL_DVM0INC SONUC_1

    TPL_DVM0:

    MOV SONUC_0,A

    ;-----------------------------;en kucuk ikinci ksmlar toplanyor

    MOV A,ILK_SAYI_1ADD A,IKINCI_SAYI_1JNC TPL_DVM1INC SONUC_2

    TPL_DVM1:

    ADD A,SONUC_1JNC TPL_DVM2INC SONUC_2

    TPL_DVM2:

  • 7/31/2019 8051assembly programlama dili

    26/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    106

    MOV SONUC_1,A

    ;----------------------------;byk ksmlar toplanyor

    MOV A,ILK_SAYI_2ADD A,IKINCI_sAYI_2JNC TPL_DVM3INC SONUC_3

    TPL_DVM3:

    ADD A,SONUC_2JNC TPL_DVM4INC SONUC_3

    MOV SONUC_2,A

    RET;************************

    5.4.1.2. N ADET BR BYTE LIK DEKENN TOPLAMINIHESAPLAYAN PROGRAM

    ;SORU:N adet bir byte lk deikenin toplamn iki bytelk;bir deiken iine atayan program

    ;NOT:BU PROGRAM 101 ADET BR BYTELIK SAYIYI;TOPLAYABLR

    N_TOPLA:

    ;Saylar 40h adresinden balasnSAYAC DATA 6FH

    SONUC_L DATA 6EHSONUC_H DATA 6DH

    MOV R0,#40HMOV SAYAC,"n"

    ;---------------N_TPL_DONGUSU:

    ADD A,@R0JNC N_TPL_DVMINC SONUC_H

    N_TPL_DVM:

    INC R0DJNZ SAYAC,N_TPL_DONGUSU

    ;----------------MOV SONUC_L,A

    RET

  • 7/31/2019 8051assembly programlama dili

    27/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    107

    5.4.1.3. K BYTE LIK DEKENLER ZERNDE IKARTMALEM PROGRAMI;31H ve 30H adreslerindeki 2 bytelk saydan

    ;41H ve 40H adreslerindeki say karlp sonu;51H ve 50H adreslerinde saklanmaktadr.

    16BIT_CIKARMA:MOV A,30HSUBB A,40HMOV 50H,AJNC DEVAM ; karma ileminde elde dnDEC 31H ; alnyorsa 31H i azalt

    DEVAM:MOV A,31H

    SUBB A,41HMOV 51H,ARET

    5.4.1.4. K BYTE LIKK DEKENN ARPIMINIHESAPLAYAN PROGRAM

    D1_H DATA 078H ;Saylarn yksek ve dk;bytelarnn atanmas

    D1_L DATA 079HD2_H DATA 07AHD2_L DATA 07BH

    S1 DATA 07CH ;sonuc bytelarnn yazlaca;adreslarin atanmas

    S2 DATA 07DHS3 DATA 07EHS4 DATA 07FH ;not:ltfen ilemden nce

    ;ieriklerini sfrlaynz.ELDE1 DATA 077H ;yndan eldelerin ekilebilmesi

    ;iin kullanlacak olan ;deikenlerELDE2 DATA 076H

    ;Iki_16bitlik_Sayiyinin_Carpimi:

    ;BIRINCI BASAMAKLARIN ARPIMI

    MOV A,D1_LMOV B,D2_LMUL AB

    MOV S1,A ;Sonucun birinci byten ataMOV R1,B ;birinci arpmn yksek byten

    ;elde iin R1 de sakla;IKINCI SAYININ BIR,BIRINCI SAYININ IKINCI BASAMAK CARPIMI

    MOV A,D2_LMOV B,D1_H

    MUL AB

  • 7/31/2019 8051assembly programlama dili

    28/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    108

    MOV R2,A ;ikinci carpmn dk byten

    ;elde iin R2 ye ata

    PUSH B ;ikinci arpmn yksek byten;elde iin yna gnder

    ;IKINCI SAYININ IKI BIRINCI SAYININ BIRINCI BASAMAK CARPIMI

    MOV A,D1_LMOV B,D2_HMUL AB

    PUSH B ;Carpmn yksek byten elde;iin yna gnder

    ;IKINCI BYTE n ELDELERININ TOPLANMASI

    ADD A,R1JNC DVM ;yeni elde kontrolINC S3 ;elde durumundaki arttrma

    DVM:ADD A,R2JNC DVM2 ;yeni elde kontrolINC S3 ;elde durumundaki arttrma

    DVM2:MOV S2,A ;toplamda gelen veriyi sonucun

    ;ikinci bytena ata;IKINCI BASAMAKLARIN CARPIMI

    MOV A,D2_HMOV B,D1_HMUL AB

    ;UCUNCU BYTE n ELDELERNN TOPLANMASI

    POP ELDE1 ;ilk eldeyi yndan ekMOV R1,ELDE1 ;ve R1 e ataPOP ELDE2 ;ikinci eldeyi yndan ekMOV R2,ELDE2 ;ve R2 ye ataADD A,R1 ;Birinci eldeyi ekleJNC DVM3 ;yeni elde kontrol

    INC S4 ;elde durumundaki artt

    rmaDVM3:ADD A,R2JNC DVM4 ;yeni elde kontrolINC S4 ;elde durumundaki arttrma

    DVM4:ADD A,S3JNC DVM5 ;yeni elde kontrolINC S4 ;elde durumundaki arttrma

    DVM5:MOV S3,A ;sonucun cnc byten ataMOV A,B

  • 7/31/2019 8051assembly programlama dili

    29/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    109

    ;DORDUNCU BYTEn ELDELERNN TOPLANMASI

    ADD A,S4MOV S4,A ;Sonucun dorduncu byten ata

    RET

    5.4.1.5. BR BYTE LIK BR DEKENN ERN DGTLERE(HANE DEERLERNE) AYIRAN PROGRAM

    ;SORU:Bir baytlk bir say deikenin yzler onlar ve birler basamaklar;olarak ayr

    BASAMAKLARA_AYIRMA:

    BIRLER DATA 30h ;BIRLER basamann tutulaca yerONLAR DATA 31h ;ONLAR basamann tutulaca yerYUZLER DATA 32h ;YUZLER basamann tutulaca yer

    MOV A,#k ;Ayklanacak sayy A ya ataMOV B,#100 ;B ye 100 ataDIV AB ;A y B ye bl

    ;Not:Bu ilemin zelliinde sonuc;Aya kalan Byte yazlr

    MOV YUZLER,A ;Sonuc olarak gelen yzler;basaman yaz

    MOV A,B ;Geri kalan onlar ve birler;basamaklarn A ya yaz

    MOV B,#10 ;B ye 10 ataDIV AB ;A y B ye blMOV ONLAR,A ;Onlar basaman yazMOV BIRLER,B ;Birler basaman yazRET

    5.4.1.6. 16 ADET BR BYTE LIK DEKENN ARTMETKORTALAMASINI HESAPLAYAN PROGRAM

    Bu alt programda 16 saynn ortalamasn alan bir alt program rnei verilmitir. 30Hden 3FH e kadar olan 16 saynn ortalamas alnarak 61H adresinde saklanmaktadr. Ayrcakalan 60H adresine yazlmaktadr. ncelikle 16 say toplanmakta ve ardndan bu toplam 16ya blnmektedir. Bilindii herhangi bir tabandaki sayy o tabana blmek o sayy saa bir

    basamak kaydrmak demektir. rnein onluk tabanda bir sayy 10 a blmek iin sayy birsaa kaydrmak ve dolaysyla varsa virgl sola kaydrmak demektir. Burada da toplanansayy 16 ya blme ilemi iin toplam says bir nibble saa kaydrlmaktadr. Oluan toplam

    en fazla nibble dan oluabileceinden defa kaydrma ilemi yaplmaktadr.

  • 7/31/2019 8051assembly programlama dili

    30/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    110

    ORTALAMA:

    MOV R0,#30H ; ilk adresMOV A,30H ;ilk deeri ykleCLR C ; sonraki ilemler iin eldeyi temizle

    DONGU:INC R0 ; bir sonraki adresADD A, @R0 ; deerleri toplaJNC DEVAM ; elde oluuyorsaINC 41H ; bir st dijiti bir arttrCLR C ; sonraki ilem iin eldeyi temizle

    DEVAM:CJNE R0,#3FH,DONGU ; 15 kez toplama ilemi yapMOV 40H,A

    BOLME:

    MOV A,40H ; 40H adresindeki dk nibble kalan olarakANL A,#0FH ; 60H adresine yazMOV 60H,AMOV A,40H ; 40H adresindeki yksek nibble 61 adresininANL A,#0F0H ; dk nibble olarak yazSWAP A ; nibble lar yer deitirMOV 61H,AMOV A,41H ; 41H adresindeki dk nibble ykleSWAP A ; dk nibble yksek nibble yapADD A,61H ; 61H deki dk nibble ykleMOV 61H,A ; akmlatrdeki yksek nibble ile

    ;topla ve kaydetRET

  • 7/31/2019 8051assembly programlama dili

    31/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    110

    5.4.1.7. N BYTELIK SAYININ ARET DEMaretli saylarla direk ilem yaplamad zaman yada iaret deiimi yapmak

    gerektiinde bu alt programla kolayca bu ilem gerekletirilebilmektedir. Bilindii gibiiaretli saylarn en yksek arlkl byte ndaki en yksek arlkl biti 0 ise say pozitif, 1 isesay negatiftir. Pozitif bir saynn negatif karl bulunmak iin ncelikle saynn btn

    bitlerinin elenii ( complement ) alnr. Bu ilemin ardndan sayya 1 eklenerek istenennegatif say bulunur. Negatif bir saynn pozitif karl da aynekilde bulunur. Bu yntemsayesinde mikroilemci sistemlerde kolaylkla iaret dnm yaplabilmektedir.

    Aada verilen rnekte 20H den 2FH e kadar olan adreslerde tutulan maximum 16byte uzunluundaki saynn iaret deiimi yaplmaktadr. Ancak istenirse bu uzunluk daha daarttrlabilir. Bu alt programda nce saynn uzunluu bulunmakta sonra bu saynn iaretdeiimi yaplmaktadr.

    SAYAC DATA 070H ; saynn byte says (N deeri).ELDE DATA 071H ;ilemde oluan eldenin tutulaca alan

    ISARET_DEGISIMI:

    MOV R0,#020H ;saynn LSB ksmnn basladg adresMOV SAYAC,#10H ;saynn kac byte oldugu bilgisi

    MOV A,@R0 ;R0n gsterdii adresteki ilk byte;(LSB) Aya yazlr.

    CPL A ;Complementi alnr.

    ADD A,#01 ;Sayya 1 eklenir.JNC ELDE_YOK_0 ;Carry yoksa dier byte gec.MOV ELDE,#01 ;Carry varsa elde buffer na yazlr.

    ELDE_YOK_0:MOV ELDE,#0 ;Carry yoksa elde buffer temizlenir.MOV @R0,A ;Dier byte Aya alnrINC R0 ;Adres deeri 1 arttrlr.DEC SAYAC ;Byte says 1 azaltlr.MOV A,SAYAC ;byte says kontrol iin Aya alnr.JZ SON ;say bitmise(tek byte ise)SONa git

    TOP: ;ilk bytetan sonraki byteler dongu;iinde tmleyenleri alnr.

    MOV A,@R0 ;Dier byte Aya alnr

    CPL A ;Tmleyeni al

    n

    r.ADD A,ELDE ;ELDE bufferndaki deer eklenir.JNC ELDE_YOK ;Carry yoksa ELDE_YOK Label na git.MOV ELDE,#01 ;Carry varsa ELDE bufferna 1 yaz.

    ELDE_YOK: ;Carry olmamas durumundaMOV ELDE,#0 ;ELDE buffer temizlenir.MOV @R0,A ;Byte yeni haliyle tekrar yazlr.INC R0 ;adres deeri arttrlr.DJNZ SAYAC,TOP ;SAYAC 0 deilse TOPa git.

    SON:RET

  • 7/31/2019 8051assembly programlama dili

    32/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    111

    5.4.1.8. DPTR REGSTERNN AZALTILMASIDPTR registerini azaltmak

    8051 komut sisteminde ok kullanlmad iin DPTR registerini azaltmak iin birkomut yoktur. DPTR registeri herhangi bir 16 bit adrese ulama imkan salar. 16 bit adreseyada herhangi bir srama tablosuna ulamda bir sonraki deere geme ilemi iin DPTRyazmac arttrlr. Kk bir alt programla bu azaltma ilemi kolaylkla yaplabilir. DPTRregisteri iki tane 8 bitlik DPH ve DPL registerlerinden oluur. Burada azaltma ilemi iin DPLregisteri azaltlmaktadr. Ancak dikkat edilmesi gereken DPL registerinde 00H deeri varsaazaltma ileminin ardndan DPL registeri FFH deerine taar. Burada nce DPL registerinden1 karlmakta, eer 00H deerinden karma ilemi oluuyorsa elde set edileceinden DPHregisterini 1 azaltlmakta elde set edilmiyorsa ilem bitmektedir.

    DEC_DPTR:CLR C ;sonraki ilemler iin elde bayran temizleMOV A,DPL ;akmlatre DPL yi ykleSUBB A,#01 ;akmlatrden 1 karJNC SON3 ;elde set edilmemise son3 e gitDEC DPH ;elde set edilmise DPH i azalt

    SON3: ;bitirRET ;geri dn

    5.4.2. BLOK AKTARMA PROGRAMLARIVeri blou transferi

    Programlarda bazen harici bellein bir ksmnn baka bir yere transferi gerekmektedir.Bunun iin R0 ve R1 registerlar kullanlarak MOVX komutuyla veri transferi alt programhazrlanmtr. Kaynak ve var harici hafza olduundan 16 bitlik registerlarla harici veri

    bloklar gsterilmelidir ancak 8051 de sadece bir tane 16 bitlik register vardr. Bu nedenle P2zerinden harici bellein yksek arlkl byte programn ierisinde byte olarak girilmektedir.Burada ncelikle P2 kullanlarak eriim yaplmal ardndan DPTR ile adresleme yaplmaldr.Bu nedenle P2 zerinden yaplan adreslemede kaynak olan harici veri bellei adreslenmelisonra ise hedef olan yere DPTR register ile veri yazlmaldr. Bu rnekte 0450H adresinden

    balayarak 4FH kadar veri AA00H adresine transfer edilmektedir.TRANSFER:

    MOV DPTR,#0AA00H ;hedef adresiMOV P2,#4 ;kaynak adresin yksek arlkl byte

    MOV R0,#50H ;kaynak adresin dk arlkl byteMOV R1,#4FH ;4FH kadar transfer yap

  • 7/31/2019 8051assembly programlama dili

    33/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    112

    GONDER:MOVX A,@R0 ;kaynaktan oku

    MOVX @DPTR,A ;hedefe yazINC R0 ;kaynak iaretisini arttrINC DPTR ;hedef iaretisini arttrDJNZ R1,GONDER ;4FH defa ilemi yapRET

    5.4.2.1. INTERNAL RAM DE YER ALAN N BYTE LIK VER BLOUNUINTERNAL RAM DE BAKA BR ADRESE AKTARAN PROGRAM

    ;Dahili hafza zerindeki 40h ve zerindeki adreslemede yer;alan "k" bytelk veri blounu hedef adresine aktaran bir ;program; a)Hedef adres>Balama Adres + k

    ; b)Hedef adresBalama Adres

    ;A)YETERLI_ARALIKTA_TABLO_AKTARMA:

    SAYAC DATA 30h ;Sayacnn deerinin tutulaca adres.MOV R0,Bas_Adrr ;Balang adresini R0 a ataMOV R1,Hdf_Adrr ;Hedef Balang adresini R1e ataMOV SAYAC,#k ;Sayac deerini ata

    DONGU:MOV A,@RO ;R0 n gsterdii bilgiyi Aya ata

    MOV @R1,A ;A nn ieriini R1 in gsterdii adrese ataINC R0 ;R0 arttrINC R1 ;R1 i arttrDJNZ SAYAC,DONGU ;Sayac sfrlanana kadar dngy tekrarlaRET ;Alt ilemden k

    ;NOT:BU PROGRAMDA VERLERN ST STE BNMES GB BR SORUN OLMADIINDANBATAN BALANMITIR;B)BELIRLI_ARALIKTA_TABLO_AKTARMA:

    SAYAC DATA 30h ;Sayacn deerinin tutulaca adresine ataMOV R0,Bas_Adrr ;Balang adresini R0 a ataMOV A,R0

    ADD A,#kh ;Aktar

    ma sondan balayabilmek iinMOV R0,A ;R0 k kadar teleMOV R1,Hdf_Adrr ;Hedef Balang adresini R1 e ataMOV A,R1ADD A,#kh ;Aktarma sondan balayabilmek iinMOV R1,A ;R1 i k kadar tele

    MOV SAYAC,#kh ;Sayac deerini ata

    DONGU:MOV A,@RO ;R0 n gsterdii bilgiyi A ya ataMOV @R1,A ;A nn ieriini R1 in gsterdii adrese ataDEC R0 ;R0 azalt

    DEC R1 ;R1 i azalt

  • 7/31/2019 8051assembly programlama dili

    34/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    113

    DJNZ SAYAC,DONGU ;Sayac sfrlanana kadar dngy tekrarlaRET ;Alt ilemden k

    ;NOTLAR:BU PROGRAMDA K ADRES ARASI BOLUK BLNMEDNDEN;AKTARIMA SONDAN BALANMITIR BU SAYEDE AKTARILMI VERLERN;DAHA AKTARILMAMI OLAN VERLERN ZERNE YAZLIARAK VER KAYBI;OLMASI ENGELLENMTR.;C)

    YETERLI_ARALIKTA_TABLO_AKTARMA:SAYAC DATA 30h ;Sayacn deerinin tutulaca adresMOV R0,Bas_Adrr ;Balang adresini R0 a ataMOV R1,Hdf_Adrr ;Hedef Balang adresini R1e ataMOV SAYAC,#k ;Sayac deerini ata

    DONGU:

    MOV A,@RO ;R0 n gsterdii bilgiyi A ya ataMOV @R1,A ;A nn ieriini R1 in gsterdii adrese ataINC R0 ;R0 arttrINC R1 ;R1 i arttrDJNZ SAYAC,DONGU ;Sayac sfrlanana kadar dngy tekrarlaRET ;Alt ilemden k

    ;NOTLAR:KK OLAN HEDEF ADRESLER KULLANILDIINDA AKTARIMA LK ;ADRESTENBALANMASI VER KAYBINI ENGELLER

    5.4.2.2. INT_TO_XRAM; XRAM_TO_INT PROGRAMLARI veri belleinden d veri belleine veri aktarm

    veri belleinin yeterli olmad durumlarda d veri bellei kullanmak gerekebilir.Ancak d veri belleine eriim i veri belleine eriimden daha fazla zaman alr. Bu nedenlei veri bellei kullanlmaldr, i veri belleinin yetmedii durumlarda d veri belleikullanlmaldr. veri belleinin 256 byte olmas nedeniyle ok fazla veri bellei kullanan

    programlarda d veri bellei de kullanmak gerekebilir. Bu alt programda i veri belleindend veri belleine belirli bir sayda byte transferi yaplmaktadr. Bunun iin d veri belleiniadreslemede DPTR register kullanlmaktadr. 30H adresinden 7FH adresine kadar olan veri

    bellei 1000H adresinden 104FH adresine kadar kopyalanmaktadr.

    INTRAM2XRAM:MOV R0,#30H ; kaynak ilk adresi ykleMOV DPTR,#1000H ; hedef adresini DPTR e ykle

    KOPYALA:MOV A,@R0 ; R0 n gsterdii adresteki deeri

    ; akmlatre alMOVX @DPTR,A ; akmlatrdeki deeri DPTR nin gsterdii

    ; yere yazINC R0 ; kaynak adresini arttrINC DPTR ; hedef adresini arttrCJNE R0,#80H,KOPYALA ; 30H den 7FH e kadar devam etRET

  • 7/31/2019 8051assembly programlama dili

    35/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    114

    D veri belleinden i veri belleine veri transferi

    D veri belleinde bulunan verilerin i veri belleine alnp burada ilem yaplmasgerekebilir. Bu durumda yukarda anlatlan ilem benzer bir ekilde veri transferi yaplr.Ancak burada kaynak d veri bellei hedef i veri belleidir. Alt programda 1000Hadresinden 104FH adresine kadar olan veriler, i veri belleinde 30H den 7FH e kadarkopyalanmtr.

    XRAM2INTRAM:MOV R0,#30H ; hedef ilk adresi ykleMOV DPTR,#1000H ; kaynak adresini DPTR e ykle

    KOPYALA2:

    MOV A,@DPTR ;DPTR nin gsterdii adresteki deeri;akmlatre alMOVX @R0,A ;akmlatrdeki deeri R0 n gsterdii yere

    ;yazINC R0 ; hedef adresini arttrINC DPTR ; kaynak adresini arttrCJNE R0,#80H,KOPYALA2 ; 30H den 7FH e kadar devamRET

    5.4.2.3. EXTERNAL RAM DE YER ALAN N BYTE LIK VERBLOUNU EXTERNAL RAM DE BAKA BR ADRESEAKTARAN PROGRAM

    D veri belleinden d veri belleine veri transferi

    Burada 1000H adresinden balayarak N adet veri 2000H adresinden itibarenkopyalanmaktadr.

    XRAM2XRAM:MOV DPTR,#1000H ;kaynak adresini ykleMOV R0,#00H ;R0 sfrla

    KOPYALA3:

    MOV DPH,#10H ;kaynak adresi iin DPH 10H,yani DPTR ye 1000HMOVX A, @DPTR ;ykle ve bu adresten akmlatre kopyalaMOV DPH,#20 ;DPH a 20H, yani DPTR ye 2000H deerin ykleMOVX @DPTR,A ;akmlatrdeki sayy DPTR nin gsterdii

    ;yere yazINC DPTR ;DPTR yi arttrINC R0 ;kopyalama ilemi says iin R0 arttrCJNE R0,#30H,KOPYALA3 ;47 defa kopyalama ilemi yapRET

  • 7/31/2019 8051assembly programlama dili

    36/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    115

    5.4.2.4. K ADET DPTR KULLANARAK XRAM DE BLOKAKTARMA PROGRAMI

    ki DPTR kullanarak XRAM den XRAM e veri transferi

    XRAM kullanarak veri transferi yaplan ilemlerde adresi gstermek iin DPTRregisteri kullanlr, ancak XRAM den XRAM e veri tarnsferi yapabilmek iin iki DPTRregisteri kullanmak gereklidir. ki DPTR registeri olmad durumlarda ikinci bir DPTRregisteri yazlmla oluturulabilir. Burada DPTR registerinin DPH ve DPL registerlerinikullanarak ikinci bir DPTR registeri varm gibi ilem yaplabilir. Bunun iin iki adres DPHve DPL registerlerine kopyalanarak DPTR registeri iki ilem iinde kullanlabilir. ByleceXRAM den XRAM e veri tarnsferi yapmak mmkn olabilmektedir.

    Bu alt programda 1000H adresinden balayarak N adet byte 2000H adresinden balayarakkopyalanmaktadr. 30H adresinde N adet byte bilgisi tutulmaktadr.

    XRAM2XRAM:MOV DPTR,#2000HMOV 40H,DPLMOV 41H,DPHMOV DPTR,#1000H

    GONDER:MOVX A,@DPTRINC DPTRPUSH DPHPUSH DPL

    INC 40HCJNE 40H,#00,DEVAM ; 40H adresinde FFH den 00H eINC 41H ; tama varsa 41H arttr.

    DEVAM:MOV DPH,41HMOV DPL,40HMOVX @DPTR,APOP DPLPOP DPHDJNZ 30H,GONDERRET

  • 7/31/2019 8051assembly programlama dili

    37/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    116

    5.4.3. ARAMA PROGRAMLARI5.4.3.1. KARILATIRMA PROGRAMLARI

    ;Belli bir k boyutlu adres aralndan oluan bir tablodaki blmlerdebulunan deerler arasnda

    ; a)En kk sayy bul; b)Tek saylarn adedini bul; c)ift saylarn adedini bul; d)En byk sayy bul

    ;A)

    EN_KUCUK_DEGER:

    EN_KUCUK DATA 31h ;Sonucun saklanaca yeri belirleSAYAC DATA 30h ;Sayac deerinin saklanaca yeri

    ;belirleMOV R0,#TUT ;lk tutulacak saynn adresine

    ;yazMOV R1,#TUT+1 ;lk karlatrlacak saynn

    ;adresiMOV SAYAC,#k ;Sayacn deerini ata

    CIKAR:MOV A,@R0 ;Bu blmde R0 da gsterdiimiz

    ;saydan R1 de gsterdiimiz sayy;kararak

    SUBB A,@R1 ;elde oluup olumadna gre;daha kk olan say belirlenir

    JNC DEGIS ;Elde durumuna gre atlama veya devam;etme(elde yoksa atla)

    DEGISME:INC R1 ;Bir dahaki say iin R1 i arttrMOV EN_KUCUK,R0 ;En kk say adresine R0 ataDJNZ SAYAC,CIKAR ;Bir dahaki sayy deneme ilemine;

    ;ge

    RET ;Alt ilemi bitir

    DEGIS:MOV A,R1 ;A yardm ile R1 ieriini alMOV R0,A ;A y R0 iine yazINC R1 ;Bir dahaki say iin R1 i arttrMOV EN_KUCUK,R0 ;En kk say adresine R0 ataDJNZ SAYAC,CIKAR ;Bir dahaki sayy deneme ilemine

    ;geRET ;Alt ilemi bitir

  • 7/31/2019 8051assembly programlama dili

    38/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    117

    ;B)TEK_SAYI_ADEDI:

    ADET DATA 30h ;Tek say adedinin tutulaca blmSAYAC DATA 31h ;Sayacn tutulaca blm

    MOV ADET,00h ;Adet ieriini sfrlaMOV R0,#BASAdrr ;R0 a ilk adresi ata

    SORGU:MOV A,#00000001b ;Sorgu ilemi Saynn 000000001b

    ;saysyla ANDANL A,@R0 ;Kaps kullanlarak yaplr ve ANL

    ;komutunun zelliinden;sonuc 1 veya 0 olarak A ieriine

    ;yazlrJNZ TEK ;A nn ierii 0 deil ise TEK;etiketine atla

    INC R0 ;A nn ierii 0 ise R0 arttrDJNZ SAYAC,SORGU ;Yeni sayy sorgulamak iin baa dnRET

    TEK: ;Tek say iseINC ADET ;ADET ieriini arttrINC R0 ;R0 arttrDJNZ SAYAC,SORGU ;Yeni sayy sorgulamak iin baa dnRET

    ;C) ift say

    adedini bulma;Bu alt programda 30H den 40H kadar olan adresteki saylar ;iinden iftsay adedi bulunmakta ve 50H adresinde ka tane ;olduu gsterilmektedir.Elde ile birlikte dndrme komutu ;kullanlarak son bitin 0 veya 1 olmasnagre ift yada tek ;olmasna baklr.

    MOV R0,#30HCIFT:

    MOV A, @R0INC R0RRC AJC DEVAMINC 50H

    DEVAM:CJNE R0,40H,CIFTRET

    ;D)EN_BUYUK_DEGER:

    EN_BUYUK DATA 31h ;Sonucun saklanaca yeri belirleSAYAC DATA 30h ;Sayac deerinin saklanaca yeri

    ;belirleMOV R0,#TUT ;lk tutulacak saynn adresini yazMOV R1,#TUT+1 ;lk karlatrlacak saynn adresiMOV SAYAC,#k ;Sayacn deerini ata

  • 7/31/2019 8051assembly programlama dili

    39/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    118

    CIKAR:MOV A,@R0 ;Bu blmde R0 da gsterdiimiz

    ;saydan R1 de gsterdiimiz sayy;kararak

    SUBB A,@R1 ;elde oluup olumadna gre daha;byk olan say belirlenir

    JC DEGIS ;Elde durumuna gre atlama veya devam;etme(elde varsa atla)

    DEGISME:INC R1 ;Bir dahaki say iin R1 i arttrMOV EN_BUYUK,R0 ;En byk say adresine R0 ataDJNZ SAYAC,CIKAR ;Bir dahaki sayy deneme ilemine ge

    RET ;Alt ilemi bitir

    DEGIS:MOV A,R1 ;A yardm ile R1 ieriini alMOV R0,A ;A y R0 iine yazINC R1 ;Bir dahaki say iin R1 i arttrMOV EN_BUYUK,R0 ;En byk say adresine R0 ataDJNZ SAYAC,CIKAR ;Bir dahaki sayy deneme ilemine ge

    RET ;Alt ilemi bitir

    5.4.4. VER FORMATI DNTRME PROGRAMLARI5.4.4.1. BINARY/BCD DNTRME PROGRAMLARI;

    BIN_TO_BCD; BCD_TO_BIN

    Binary BCD dnmleri

    Burada binary saylardan BCD ( Binary Coded Decimal ) saylara ve BCD saylardanbinary saylara dnm ilemi iin iki alt program yazlmtr. BCD saylarla ilembildiimiz 10 tabannda yaplan ilemlerin 16 tabanndaki mikrodenetleyici sistemlerleyaplan ilemler arasnda dnm iin kullanlr.

    Binaryden BCD ye dnm yapan alt programda 30H de bulunan say dnmileminden sonra onlar ve birler basama 40H de yzler basama ise 41H desaklanmaktadr.

    BCD den binary e dnm ileminde 30H adresindeki say dnm ilemi ardndan40H adresinde saklanmaktadr.

  • 7/31/2019 8051assembly programlama dili

    40/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    8051 & ADuC8xx ETM NOTLARI Blm 5Selim Dilma 8051 Assembly Dilinde Programlama

    119

    BINARY2BCD:

    MOV A,30H ;MOV B,#0AH ;DIV AB ;MOV 40H,B ; birler basaman 40h adresine yazMOV B,#0AH ;

    DIV AB ;MOV 41H,A ; yzler basaman 41H adresine yazMOV A,B ; onlar basaman akmlatre yazSWAP A ; onlar basama olarak deitirADD A,40H ; onlar basaman birler basamaylaMOV 40H,A ; topla ve sonucu 40H adresine yazRET ;

    BCD2BINARY:

    MOV A,30H ;ANL A,#0F0H ;alt nibble n silSWAP A ;nibble lar deitirMOV B,#0AH ;MUL AB ;MOV A,B ;MOV 32H,A ;Adaki say geici olarak 32H yazMOV A,30H ;ANL A,#0FH ;st nibble n silADD A,32H ;geici deerle topla

    MOV 40H,A ; sonucu yazRET

    5.4.4.2. BINARY VE ASCII DNMLERHaberleme sistemlerinde ve deiik uygulamalarda sklkla kullanlan binary ve

    ASCII dnmleri iin kullanlan iki alt program yazlmtr. Bilindii gibi ASCII tablosu256 karakterden olumaktadr. Bunlardan 30H ve 39H arasndaki semboller 0-9 saylardr.Hexadecimal sistemde kullanlan A-F ise 41H ve 46H arasnda bulunmaktadr. Ayrca a-fkk harfleri de 61H ve 66H arasnda bulunmaktadr.

    Binaryden ASCII ye dnm ileminde nce R0 alnan binary deerin say m harfmi olduuna baklmakta ardndan buna gre say ise o sayya 30H, harf ise 61Heklenmektedir. Bu kontrol ilemi o akmlatrdeki deerden 10 karlmaktadr. Eer say isekarma ileminde karlan say kan saydan byk olacaktr ve elde bayra setedilmeyecektir, karlan say kan saydan kk ise elde bayra set edilerek o deere 41Hdeeri eklenecektir. Burada A-F arasndaki harf deerlerine 41H eklenerek ASCIItablosundaki byk harfler kullanlmtr. Gerektiinde bu deerlere 61H yerine 41Heklenerek harflerin ASCII tablosundaki kk harf karlklar da bulunabilir.

    ASCII den binary e dnmde ise yukarda anlatlanlarn tam tersi yaplmaktadr.

    Ancak burada ek olarak harf ASCII karakterlerin byk ve kk olmas

    durumlar

    iin ek

  • 7/31/2019 8051assembly programlama dili

    41/41

    Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEYTEL: +90 216 6518000 FAX: +90 216 6518009

    http://www.elektro.com.tr [email protected]

    bir kontrol daha yaplmaktadr. ki alt programda da girilen deer R0 a kan sonu iseakmlatrde saklanmaktadr.

    BINARY2ASCII:MOV A,R0 ;R0 daki deeri akmlatre ykleCLR C ;sonraki ilemler iin elde bayran

    ;temizleSUBB A,#0AH ;say m harf mi olduunu bulmak iin

    ;10 kar

    JNC SAYI ;elde set edilmemise say ilemine geADD A,#41H ;elde set edilmise 41H ekleJMP SON ;ilemi bitir

    SAYI: ;elde set edilmemise say ilemiMOV A,R0 ;deeri akmlatre ykleADD A,#30H ;say iin 30H ekle

    SON: ;bitirRET ;alt programdan geri dn

    ASCII2BINARY:MOV A,R0 ;R0 daki deeri akmlatre ykleCLR C ;sonraki ilemler iin elde bayran

    ;temizleSUBB A,#41H ;say m byk harf mi olduunu bulmak

    ;iin 41H karJNC SAYI2 ;elde set edilmemise say2 ilemine geADD A,#0AH ;byk harf iin kan deere 10 ekleJMP SON2 ;ilemi bitir

    MOV A,R0 ;R0 daki deeri akmlatre ykleSUBB A,#61H ;say m kk harf mi olduunu bulmak

    ;iin 61H karADD A,#0AH ;kk harf iin kan deere 10 ekleJNC SAYI2 ;ilemi bitir

    SAYI2: ;elde set edilmise say ilemiMOV A,R0 ;R0 daki deeri akmlatre ykleSUBB A,#30H ;say deeri iin 30H ekle

    SON2: ;bitirRET ;geri dn