8051assembly programlama dili
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