You are on page 1of 41

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

http://www.elektro.com.tr info@elektro.com.tr

ASSEMBLY DLNDE PROGRAMLAMA


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

5.1.

ASSEMBLERA GR

Assembly mnemonic olarak adlandrlan komut yaplarndan oluan makine kodundan sonra en alt seviyelide yer alan bir programlama dilidir.

Programlama Dillerine Giri


Programlar 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 nedenle yazm ve tekrar kontrol ilemi ok zordur. Ancak direk altrlabilirler. Assembly mnemonic olarak adlandrlan komut yaplarndan oluur. Bu komutlar aklda kalc olduundan makine diline gre yazm ok daha kolaydr. Ancak yazlan kodlarn derleme ilemi ardndan makine dilleri karl direk makine diliyle yazlm karlna ok yakndr. Orta seviyeli dillere C dili rnek verilebilir. Burada mnemonicler assembly mnemoniclerine 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. 81 8051 & ADuC8xx ETM NOTLARI Selim Dilma Blm 5 8051 Assembly Dilinde Programlama

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

Yksek seviyeli dillerde kullanm kolayl temel alnmtr. Bu nedenle arayz kullanlarak kullanm kolayl salanmtr. Ancak bu dillerle oluturulan programlar genelde boyut olarak daha byk olurlar.

5.1.1.

ASSEMBLY NEDR, DER PROGRAMLAMA DLLER LE BENZERLKLER VE FARKLILIKLARI

Assembly makine kodundan sonra en alt seviyeli programlama dilidir. Makine diline seviye olarak ok yakn olmasna karn yazm kolayl makine diline gre daha fazladr. Makine dilinde komutlar sadece saylardan oluur ve bu hatrlanmas zor, zaman harcayan bir itir ancak assembly de komutlar aklda kalacak ekilde ve ksadr. Assembly dilinin dier orta ve yksek seviyeli diller gibi komut says ok deildir ve bu komut yaplar belirli hazrlanm formatlarda deildir. Bu nedenle assembly dilinin, dier programlama dillerine gre yaps farkldr. Assembly dilinin dier programlama dillerine gre en nemli fark ve avantajlarndan birisi kullanlan komutlardaki esnekliktir. Yani kullanc yazd komut ve algoritmalara daha hakimdir ve bunu kendi istei dorultusunda dzenleyebilir. Dier st seviyeli programlama dillerinde ise komutlarn belirli bir yaps vardr ve bu ou zaman yazm kolayl salasa da yazm esneklii azalmaktadr. rnein orta seviyeli bir dil olan C ile karlatrlrsa, assembly daha az komut saysna ancak daha geni komut kullanm yapsna sahiptir. Yksek seviyeli diller ile karlatrldnda ise visual tabanl bir programn assembly dilinde yazm daha fazla zaman alr, ancak assembly dilinde yazlan kodun sadece gerekli olduunda library leri kulland ve daha az makine evrimi srd dnlrse assemly dilinin nemi anlalr. Yksek seviyeli dillerin yaygn kullanmna karn, halen hzn ve verimin nemli olduu noktalarda yazlan ou programda assembly dili kullanlmaktadr. Assembler; yazlan komutlarn birletirilmesi, dzenlenmesi ve makine diline evrilmesi ilemini yapan evrim programlardr. Assembler sayesinde makine dili bilmeden makine kodlar kolaylkla oluturulabilmektedir. Assembler program iinde yazm kolayl asndan kullanlan tanmlama ve deikenleri orijinal deerleriyle deitirir bu sayede kodun 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 ilemi yaplmaz. Cross-Assembler : Bu Assembler da, oluturulan makine kodu farkl bir sistemde alacandan program kodu bu altrlacak sistemin makine koduna dntrlr. Makro-Assembler : Makro assembler lar normal Assembler lardan daha gelimi bir yap gsteririler. Bunlar sk kullanlan komutlar baka programlardan arma ve yksek seviyeli dillerdeki gibi kontrol ilemleri gibi ek zellikler sunarlar. Normal Assembler a gre daha fazla kolaylk salamaktadr. 82 8051 & ADuC8xx ETM NOTLARI Selim Dilma Blm 5 8051 Assembly Dilinde Programlama

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

Assembler lar genel olarak nce kaynak kod (source code) dosyalarndan ( *.asm *.src vb ) hareketle list ( *.lst ) dosyalarn olutururlar. List dosyalarnda komutlarn ve aklamalarn yan sra opcodelar, yerletirildikleri adresler ve eer varsa hata olan satrlar ile hata trlerine ait aklamalar bulunur. List dosyalarnn oluturulmasnn ardndan bu dosyalardan object (*.obj ) dosyalar oluturulur. Object dosyalar balanarak ( linking ) tek bir makine kodu dosyas oluturulur. Bu balama ileminde tanmlanan ve arlan alt programlara baklarak alt programlar uygun olan yerlere yerletirilirve makine kodu oluturulur. Program alma aamasna gelmeden nce birok deiik aamadan geer. Bu aamalar srasyla ; dizayn, kodlama, evrim, test, debug olarak ifade edilebilir. Bu aamalar aklamak gerekirse dizaynda istenilen amaca uygun algoritma yaps oluturulur. Kodlamada ise kullanlan mikroilemci sisteme uygun komutlarla herhangi bir text editr yada assemblerin kendi text editr kullanlarak kodlama ilemi yaplr. evrim ileminde yazlan kodlar nce list dosyalarna, ardndan object dosyalarna dntrlr. Debug ileminde ise oluan hatalar ve hata kaynaklar ayklanmaya allr. Debug ileminin ardndan yrtlebilir makine kodu oluturulur ve istenilen ilem gerekletirilir.

5.1.2. ASM51 ASSEMBLER GENEL YAPISI


8051 mikrodenetleyici ailesi iin kullanlan ASM51, kullanm kolayl ve modler programlamay salayabilmesi asndan hem amatr hem de profesyonel uygulamalar iin yeterlidir. Assembler yada herhangi bir text editrde yazlan kod ASM51 de derlendikten sonra baz ilemlerin ardndan mikrodenetleyici sistemin altrlabilecei hex dosyasna dntrlr. Burada dikkat edilmesi gereken nokta text editrde yazldktan sonra dosya uzants olarak asm (*.asm) eklinde kaydedilmelidir. Genelde yazlan kod sadece bir asm dosyasnda tutulur. Ancak istenildiinde daha geni ve ileriye dnk uygulamalar iin alt programlar baka asm dosyalarnda olabilir. Bu ekilde yazlan alt programlar daha sonra baka uygulamalarda tekrar kolaylkla kullanlabilmektedir. Bu ilem iin ana programda baz direktiflerle bu alt programlar kullanlmaktadr. 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. Bu ilemin ardndan assembler bu object dosyasndan 8051 komutlarnn opcode (operation code) larn oluturur. Opcode mikrodenetleyici sistemin yazlmla, komut ilemlerinin donanm tarafndan yrtlebilir hale getirilmi halidir. Yani opcode lar yazlm kodunun makine kodu (machine code) karldr.

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

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

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 komutu aritmetik 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 dier deikenlerdir.
ADD A,Operand ;Operand ierisinde yer alan deerile a register ;iindeki deer toplanp Anin ierisine yazlr.

Mikroilemcili sistemlerde kullanlan komutlar uzunluk ve makine evrimi asndan farkllk gsterirler. Bunun nedeni baz komutlar sadece bir operandla bir ilemi gerekletirirken, baz komutlar iki oparandla birden ok makine evrimi kullanarak istenen ilemi gerekletirler. Mikroilemci sistemler hangi komutun ne kadar uzunlukta olduunu ve buna gre bir sonraki ileme gemeyi Program Counter yardmyla yaparlar. Program Counter sayesinde mikroilemci bir komuttan sonra gelen bilginin operand m yoksa baka bir komut mu olduunu anlayp buna gre ilem yapar. Bu sayede komutlar farkl uzunlukta olsalar bile sorunsuz bir ekilde altrlabilirler. Instruction Register makine kodunun ilenmeye balanmadan nce tutulduu yerdir. Yani ALU ve dier donanm kontrol birimlerinde yrtlmeden nce opcodelarn tutulduu yerdir. Instruction Registerdeki opcode lar daha sonra zmlenerek (decode) istenilen ilem gerekletirilir. Mnemonic kodun kullanmna uygun gsterili formatdr.

5.1.4. PROGRAM KODU


Assembly 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 ama iin yazld en son deiim tarihi gibi sonraki inceleme ve kullanmlar iin kolaylk salayacak bilgiler bulunur. Her satrna noktal virglle baland iin derleme ileminde makine kodunun oluturulmasnda dikkate alnmaz 84 8051 & ADuC8xx ETM NOTLARI Selim Dilma Blm 5 8051 Assembly Dilinde Programlama

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

Tanmlamalar
Kodun ilk ksmdr, ancak ilk bata oluturulmaz. Burada program yazlrken oluturulan sabit tanmlamalar, bellek adres tanmlamalar ve programn balang iin gerekli tanmlamalar vardr. Program yazlrken zamanla oluan deikenler, sabitler burada yaplan tanmlamalarla programn daha kolay ve okunabilir olmas salanr.

Kesme servis programlar


Buras mikrodenetleyici sistemin kulland kesme servis programlarnn, retici firma tarafndan belirlenmi adreslere gerekli alt programlarn yerletirildii ksmdr. Bu adresler nceden belirli olduundan buradaki belirlenen adreslere ORG komutuyla gerekli komutlar yerletirilir.

Ana Program
Ana program; yazlmn genel ksmdr. Bu ksm dier program bloklar ve yaplarn kullanld, genel kontrol ve dier ilemlerin yapld ksmdr. Program ierisinde yazm kolayl iin kullanlan semboller, modler programlamada kullanlan direktifler ve esas kontrol komutlar ana programda bulunur. Ana program mikrodenetleyici sistemin ilk artlandrmalarnn yapld almaya hazr hale getirildii konfigrasyon ksmdr. Burada mikrodenetleyici sistemin donanm ve yazlm olarak ilk artlandrmalar 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 gerektiinde arlan komut bloklardr. Okunabilirlik asndan alt programlara, alt programn ileviyle ilgili bir etiket verilmelidir. Ayrca alt programlar iin ayn etiketlerinin kullanlmamasna dikkat edilmelidir, aksi takdirde derleme ilemi srasnda assembler hata mesaj verecektir. Alt programlarn sonuna mutlaka RET komutu konulmaldr, aksi takdirde program yanl komutlar 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. Bu tablolar bir etiketle balar ve DB veya DW komutlar yardmyla oluturulur.

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

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

5.2.

DREKTFLER

Direktifler Assembler tarafndan dorudan makine koduna eklenmeyen ancak dier komut, alt program ve kontrol ifadelerinin ilenmesini salayan komutlardr. Bu komutlar sayesinde assembler makine koduna belirli eklemeler ve deiiklikler yaparak programn daha etkili ve kolay bir ekilde oluturulmasn salar.

EQU
EQU komutuyla belirli deiken ismi sabit olarak atanabilir. Derleyici EQU komutuyla tanmlanan btn deikenlere derleme ilemi srasnda tanmlanan sabit deerini yerletirir. Bylece deikenler makine koduna sabit deerler olarak yerletirilir. EQU tanmlama komutuyla tanmlama yaplrken ayn deiken ismi yalnzca bir kez kullanlmaldr. Ayrca EQU komutuyla komut ve direktifler tanmlama iin kullanlmamaldr.
SAYAC EQU 45H ARTIM EQU 32 MOV A,SAYAC

DATA
Data komutuyla belirli bir adres bir deiken olarak atanabilir. Bylece uzun programlarda ok saydaki bellek adresleri bu deiken isimler kullanlarak bellek adresleri karkl olmadan kolaylkla kullanlabilir. Derleyici DATA komutuyla tanmlanan btn deikenlere derleme ilemi srasnda tanmlanan bellek adresini yerletirir. Bylece deikenler makine koduna bellek adresleriyle ilem yaplm gibi yansr. Bu komut orta ve yksek seviyeli dillerdeki deikenlerin karl olarak dnlebilir. Dikkat edilmesi gereken nokta DATA tanmlama komutuyla tanmlama yaplrken ayn deiken ismi yalnzca bir kez kullanlmaldr. Ayrca DATA komutuyla komut ve direktifler tanmlama iin kullanlmamaldr.
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 dier deiken tanmlamalarna olduu gibi bu deikenlerde derleme ilemi srasnda adres kod bellei adres deerleri yazlarak derleyici tarafndan deitirilirler.
RESET CODE 00H TIMERO_KESMESI CODE 0BH

SET
EQU komutu gibi bu direktif de bit tanmlamalar iin kullanlr. 86 8051 & ADuC8xx ETM NOTLARI Selim Dilma Blm 5 8051 Assembly Dilinde Programlama

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr
FLAG BIT 0

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

ile
31_karakterden_uzun_tanmlama_i

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

Etiketler
Etiketler arma ve srama komutlarnda kullanlr. Etiketlerden sonra iki nokta iareti kullanlmaldr. Etiket isimleri sayesinde arma yada srama komutlarnda alt programlarn balang adresleri bilinmek zorunda deildir. Derleme ilemi srasnda derleyici etiketten sonra gelen komutun program bellei adresini etiketin isminin getii btn komut satrlarna yerletirir. Bylece kullanc komutlarn uzunluklarn ok gerekmedike hesaplamakla uramayacaktr. Etiketler kullanlarak etiketten sonra gelen komutlarn istenen yerde yrtlmesi salanr.
ALT_PROGRAM: MOV R1,#45H MOV A,@R1 DEC DPTR RET

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

ORG
Bu direktif sayesinde bu komutun ardndan gelen kod belirtilen adresten sonra kod belleine yazlr. Bu komut sayesinde kesme servis programlar donanm reticileri tarafndan belirlenen adreslere kesme servis alt programlarnn yerletirilmesini salar.
ORG 001BH INC 32H MOV A,32H RETI ; ; ; ; Timer1 kesme adresi 32H n ieriini bir arttr 32H akmlatre yaz kesmeden geri dn

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

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

Yukardaki rnekte Timer1 kesme servis alt programnda kk bir alt program rnei yazlmtr. Not : Kesme servis alt programlarnn uzunluu en fazla 8 byte olmak zorundadr. Eer daha uzun bir servis program yaplacaksa, bu program bir alt program olarak oluturulur ve kesme servis alt programnda bu alt program arlr.

ORG 0100H MOV R0,#90H MOV 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 program blounun iine yerletirilir. Bylece srekli kullanlan alt programlar defalarca yazlmak yerine ana programdan INCLUDE komutuyla arlarak program belleine bu komutun ardndan yerletirilir.
#INCLUDE 7_SEGMENT.ASM

DB
DB komutu kendisinden sonra gelen deerlerin sadece byte olarak sabitler olduunu belirtir. Bylece bu komuttan sonra gelen karakter belirlenen etiketten sonra program belleine byte byte yerletirilir ve DPTR registeri kullanlarak buradan okuma yaplabilir. Bu komutla ayrca iki trnak iersine alnan karakter yada karakter dizileri ASCII olarak kaydedilir. ASCII olarak kaydetme ilemi yine derleyici tarafndan derleme ilemi srasnda yaplr ve yazlan karakterlerin ASCII karlklar kolaylkla bulunmu olur. Bu ilem seri porttan veri gnderirken yada LCD gibi gsterge amal uygulamalarda ok kullanlmaktadr.
TEK_SAYILAR: YAZI: DB 1,2,3,5,7,11,13,17,19

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 de WORD olarak yani 16 bit olarak program belleinde saklanmaktadr. 88 8051 & ADuC8xx ETM NOTLARI Selim Dilma Blm 5 8051 Assembly Dilinde Programlama

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr
TABLO: DW 2004,G, 1900,45,F

END
Yazlan btn programlar END direktifi ile bitirilmelidir. Bunun nedeni mikrodenetleyici kod belleinde komutlar srayla yrtrken kodun nerede bittiini alglayamaz ve aa doru kod belleindeki deerlere gre ilem yapmaya devam eder. Bylece program belleine yazlan son makine komutundan sonra o adreste bulunan rasgele deer makine koduymu gibi ilem grr ve bu istenmeyen sonular gzlenmesine neden olabilir. Ancak programn sonunda tekrar programn bana srama komutu veriliyorsa bu komut kullanlmayabilir de nk mikrodenetleyici hibir zaman belirsiz makine kodlarn yrtemez ve bylece istenmeyen sonular gzlenmemi olur. Ancak programn sadece bir kez almas isteniyorsa ve sonra ilemleri durdurmas isteniyorsa programn sonuna END komutu eklenmelidir.
ANA_PROGRAM: END

Aklamalar
Aklamalar program tekrar incelendiinde yada bakas tarafndan incelenmesi gerektiinde programda kullanlan algoritmalar anlatan ksa ifadelerdir. Komutlardan sonra noktal virgl ( ; ) ile balayan ksmdr. Genellikle programn uzun uzun aklams yaplmaz, sadece o satrdaki ilem bu ilemde ne yapld anlatlmaya allr. Aklamalar noktal virglle baladndan derleyici bu karakterden sonra karakterleri sadece list ( *.lst ) dosyasna ekler, object ( *.obj ) ve hexadecimal ( *.hex ) dosyasnda aklama ksm grlmez.
MOV DONGU: MOV R0,#08H A,@R0 ;ilk deer ;R0 n gsterdii adresteki sayy ; akmlatre ykle ;R0 arttr ;R0 E0 oluncaya kadar ileme devam et

INC R0 CJNE R0,#0E0H,DONGU

5.3.

8051 KOMUT SET KULLANIM RNEKLER

Bu blmde 8051 Assembly dilinde kullanlan komutlar anlatlm ve kullanmlarna dair basit programlama rnekleri verilerek aklanmtr. 89 8051 & ADuC8xx ETM NOTLARI Selim Dilma Blm 5 8051 Assembly Dilinde Programlama

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

5.3.1. VER TRANSFER KOMUTLARI LE HAFIZA VER AKTARIMI RNEKLER


Hafza zerinde her hangi bir adresteki verinin bir yerden baka bir yere aktarlmas iin veri transfer komutlar kullanlr. Veri bu komutlarla farkl adresleme modlar ile yer deitirir.

5.3.1.1.

VED ADRESLEME (IMMEDIATE ADDRESSING MODE)

Hemen adreslemede gnderilecek veri bir sabitten oluur. Alt programlarda yada genel amal olarak programlarda belirli sabitlere bal olarak program aknn devam etmesi iin hemen adresleme kullanlr. Genellikle bir byte transfer edilir. Ancak iki byte transferin gerekli olduu durumlarda DPTR registeryla iki byte transferi yapmakta mmkndr.
MOV A,#18H MOV A,#18 MOV R0,#4 MOV PSW,#0 MOV DPTR,#6500H MOV DPTR,#TABLE ;Akmlatre 18H deerini ykle ;Akmlatre 18 deerini ykle 18 A 18

;R0 registerna 4 deerini ykle ;PSW registerna 0 deerini ykle ;DPTR registerna 6500H deerini ykle ;TABLE etiketindeki bloun adresini ykle

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

5.3.1.2.

DORUDAN ADRESLEME (DRECT ADDRESSING MODE)

Dorudan adresleme modunda i veri veya SFR registerndan yine i veri veya SFR registerna veri transferi yaplr. Portlar da SFR registernda adreslendii iin bu adresleme modunda portlardan da veri okunup yazlabilir.
MOV A,70H ;70H adresindeki veriyi akmlatre gnder.

Dahili RAM Akmlatr


0EEH

0EEH

70H 90 Blm 5 8051 Assembly Dilinde Programlama

8051 & ADuC8xx ETM NOTLARI Selim Dilma

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

MOV 60H,A

;Akmlatrdeki veriyi 60H adresine yaz.

Ayrca program yazarken kullanm kolayl asndan kullanlan Equal tanm yardmyla belirli bir adres kolayca adreslenebilir.
PORT1 EQU 90H MOV PORT1,55H ;Assembler bu tanmdan sonra PORT1 grd ; yere 90H deerini yerletirir. ;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-R7 registerlar 4 farkl ekilde konumlandrlabilir. Bunun iin ncelikle PSW registerndaki 4. ve 3. bitler ayarlanr. Bu bitlerin varsaylan deeri 00 dr. PSW deki bu iki bit deitirilerek R registerlar 32 register gibide kullanlabilir.
MOV R0,A MOV PSW,#10H MOV R4,B ;akmlatrdeki veriyi R0a yaz. ;ikinci bank seilir. R0 97H A 97H

;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 daha kk veri boyutu iin dzenlenmitir. Bu ekilde ok fazla kullanlan komutlar daha verimli bir halde gerekletirilir ve ana program sresi ksaltlm olur. Bu adresleme moduna rnek olarak 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)


91

8051 & ADuC8xx ETM NOTLARI Selim Dilma

Blm 5 8051 Assembly Dilinde Programlama

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

nceki blmlerde anlatld gibi st veri blgesi iki paradan oluur. Bu iki blgenin ayr ayr kullanlabilmesi bu adresleme moduyla gerekletirilir. Ayrca bu adresleme moduyla harici veri yada program blouna okuma ve yazma ilemleri iin eriilebilir.
MOV R0,78H MOV @R0,#4 MOV DPTR,#9000H MOVX @DPTR,A ;R0 a 78H adresindeki deeri ykle ;R0n gsterdii yere 4 deerini yaz. ;DPTR registerna 9000H deerini ykle ;akmlatrdeki veriyi DPTR registernn ;gsterdii yere yaz.

5.3.1.6.

REGISTER NDEKSL ADRESLEME MODU (REGISTER INDEXED ADDRESSING MODE)

Bu adresleme modu en ok tablo kullanmnda kullanlr.Bunun iin ncelikle tablonun adresi program belleinde olduundan 16 bitlik bu tablo adresi DPTR registerna yklenir. Ardndan bu tablo deerlerinden istenilen, akmlatr yardmyla okunur ve gerekli ilemler yaplr. Aada SAYICI adnda 0-9 sayan bir deikenin ieriini 7-segment LED displayde grntleme alt program rnei verilmitir. Gerektiinde bu alt program arlarak akmlatrdeki say 7-segment LED displaye gnderilir.
MOV MOV MOVC A,SAYICI DPTR,# DISPLAY_TABLOSU A,@A+DPTR ;look up table'n balang adresi ;DPTR'ye atanr ;A ya tablonun istenen deeri ;atanr. ;Hanede grnecek olan seen ;tablodur ;0 ;1 ;2 ;3 ;4 ;5 ;6 ;7 ;8 ;9 Grnr Grnr Grnr Grnr Grnr Grnr Grnr Grnr Grnr Grnr

DISPLAY_TABLOSU: DB DB DB DB DB DB DB DB DB DB 00000000B 00000001B 00000010B 00000011B 00000100B 00000101B 00000110B 00000111B 00001000B 00001001B

Bu deerler srasyla 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F display iin dzenlenmi halidir. Buradaki rnekte tablonun balang adresi
MOV DPTR,# DISPLAY_TABLOSU

deerlerinin 7-segment LED

92 Blm 5 8051 Assembly Dilinde Programlama

8051 & ADuC8xx ETM NOTLARI Selim Dilma

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

komutu ile alnmtr. Bu komut sayesinde tablonun program belleindeki belirli bir adresten deil de programn ilerleyen ksmnda yklenerek daha verimli kullanlmas salanmtr. Bu kullanmn 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. Bu adresleme modunda dikkat edilmesi gereken nokta yn sisteminin alma mantdr. 8051 ailesi mikrodenetleyicilerinde first in- last out sistemi kullanlr. Yani yna ilk gnderilen veri en son kartlr. Bu adresleme moduna rnek aadadr.
MOV A,12H PUSH ACC
. .

POP B

Not : Burada akmlatrn ACC eklinde gsterimine dikkat edilmelidir. PUSH A komutu derleyici tarafndan doru bir komut olarak alglanmaz nk burada zel register adresleme modu kullanlmtr.

5.3.1.8.

YER DETRME (EXCHANGE) KOMUTLARI

Yer deitirme komutu herhangi bir adresle akmlatr arasnda veri deiimi eklinde olur. Burada deiim ilemi direkt yaplmaktadr, yani akmlatrn baka bir yere geici olarak kopyalanmasna gerek yoktur. Burada dikkat edilmesi gereken nokta kaynak dorudan yada dolayl adreslenmi herhangi bir adres olabilir ancak hedef her zaman akmlatrdr. Ayrca bu komut yapsnn iersinde nibble tamaya zel ek bir komut vardr.Bu komut ile akmlatrn dk anlaml nibble (drt bit) ile dier operandn dk anlaml nibble yer deitirir. Yksek anlaml nibblelar bu deiimden etkilenmez.Bu ek komut BCD ( Binary Coded Decimal ) ilemlerinde kolaylk salamaktadr. Komutlarn kullanmna rnekler :
MOV A,#023H MOV B,#045H XCH A,B MOV R0,7FH XCHD A,@R0

;Bu ilemin ardndan artk Ada 45H, ;deeri olur.

Bde 23H

;Bu ilemin ardndan 7FH adresindeki dk anlaml ; nibble ile akmlatrdeki dk anlaml ;nibble yer deitirir.

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

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

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 yada bayran kontrol ve transferi iin programlarda byk bir esneklik ve kolaylk salar . rnein bir butonun konumu bu komutlarla rahatlkla kontrol edilebilir. Ayrca portlardaki herhangi bir bitin kontrolyle sisteme balanan bir birim kontrol edilebilir. Bit ileme komutlarnda unutulmamas gereken bir nokta ise SFR registerlarndan sonu 0 veya 8 ile biten adreslerin bit bit kontrol edilebileceidir.Yani bu adreslerden bit okuma ve yazma ilemleri yaplabilir. Ayrca 20H-2FH arasndaki 16 byte lk blgede bit olarak adreslenebilmektedir. Bu bit adresleme yntemi aada aklanmtr. i : 20H ve 2FH arasndaki adres j : 0. ve 7 . bitler Bit 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 JC ALTPROG JNB 16H,ALTPROG2 ;45H adresindeki bit elde bayrana alnmtr ;elde set edilmise ALTPROG a git ;16Hadresindeki bit set edilmemise ALTPROG2e ;git

5.3.2. VER LEME KOMUTLARI LE HAFIZA VER AKTARIMI RNEKLER


Veri ileme komutlar aritmetik ve lojik ilemler incelenebilir. olarak iki blm halinde

5.3.2.1.

ARTMETK LEMLER

Bu blmde toplama-karma, arpma-blme gibi aritmetik ilemlere ait komutlar aklanacaktr.

5.3.2.1.1.

TOPLAMA VE IKARMA LEMLER

94

8051 & ADuC8xx ETM NOTLARI Selim Dilma

Blm 5 8051 Assembly Dilinde Programlama

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

Toplama lemi: 8051 komut setinde iki ayr toplama ilemi komutu vardr, ADD ve ADDC. Bunlar srasyla toplama ve elde ile toplama komutlardr. Her iki komutta da iki byte toplanarak sonu akmlatrde saklanr. ADD komutu; akmlatr ve herhangi bir adresteki saynn toplanarak sonucun akmlatre saklanmasn salar. ADDC ise normal toplama komutuna ek olarak elde bayrandaki bitin de toplamaya katlmasn salar. Her iki toplama komutunda da 3 bayrak sonutan etkilenir. Bunlar; elde, yarm elde ve tama bayraklardr. Elde bayra kan sonutan elde oluuyorsa set edilir. Yarm elde bayra ise toplanan saylardaki dk nibble lardan tama oluuyorsa set edilir. Yarm elde BCD saylarla yaplan ilemlerde kolaylk salamaktadr. Tama bayra ise 6.bitlerin deil de sadece 7. bitlerin toplamndan elde oluuyorsa set edilir, veya 7. bitlerin deil de sadece 6. bitlerin toplamndan tama oluuyorsa set edilir. Bu tama bayra iaretli saylarla yaplan ilemlerde toplanan saylarn iareti dikkate alnarak toplama ileminin yaplmasn salar. Bu komutlarn kullanmna rnekler :
MOV A,#03 ADD A,#04 MOV 78H,#02 ADD A,78H

;bu komutun ardndan artk ;akmlatrde 07 deeri olur. ;akmlatrde 09 deeri olur.

78H -79H ve 7AH-7BH adreslerindeki ikier byte lk saylarn toplam


.... MOV 78H,#34H MOV 79H,#12H MOV 7AH,#0EFH MOV 7BH,#12H MOV A,78H ADD A,7AH MOV 78H,A MOV A,79H ADDC A,7BH MOV 79H,A ;bu ilemin ardndan 78H de 23H deeri oluur ;ve elde ;bayra set edilmi olur ;bu ilemin ardndan 79H de 25H deeri oluur

....

karma lemi: Toplama ileminin aksine karma iin sadece SUBB komutu mevcuttur. Subtract with Borrow kelimelerinin ksa ifadesi olan bu komutta Carry Elde biti, Borrow - Bor biti olarak deerlendirilir. karma ileminde de toplama ileminde olduu gibi sonu yine akmlatrde saklanr. Akmlatrdeki saydan herhangi bir adresteki say karlarak sonu akmlatre yazlr. karma ileminde akmlatrdeki deer dier saydan kkse elde biti set95 8051 & ADuC8xx ETM NOTLARI Selim Dilma Blm 5 8051 Assembly Dilinde Programlama

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

edilerek ilem srasnda eldenin dn alnd belirtilir. Bu zellik oklu karma ilemlerinde kolaylk salamaktadr. Eer eldeli karma yaplmas istenmiyorsa, yani birden fazla bytedan oluan iki deiken zerinde karma yaplmyorsa, elde bitinin nceki deerinin karma sonucunu etkilememesi iin elde biti temizlenir (CLR C). Yarm elde bayra da toplamada olduu gibi BCD saylarla yaplan ilemlerde kullanlr. Akmlatrdeki saynn dk nibble kan saydan kkse yarm elde bayra set edilir. Yine tama bayra da toplamada olduu gibi iaretli saylarla yaplan ilemlerde saylarn iaretlerini korumas iin kullanlr. Yani tama bayra 6. bitlerin deil de 7. bitlerin yada 7. bitlerin deil de 6.bitlerin karma ileminden dolay elde ihtiyac oluuyorsa set edilir. karma ilemine rnek aadadr: Hatrlatma: karma ileminden nce gerektiinde elde bayra temizlenmelidir. 78H ve 79H adreslerindeki iki byte uzunluundaki saydan 7AH ve 7BH adreslerindeki saynn kartlmas
78H 79H

12H
..... 7AH

34H
7BH

MOV MOV MOV MOV CLR

78H,#12H 79H,#34H 7AH,#11H 7BH,#35H C

11H
7CH

35H
7DH

00H

FFH

MOV A,79H SUBB A,7BH MOV 7DH,A MOV A,78H SUBB A,7AH MOV 7CH,A .....

;Bu ilemin ardndan ;Akmlatrde #0FFH deeri oluur ;elde bayra (Carry flag) set deerini alr. ;karma esnasnda Carry biti de dikkate alndn;dan sonu 00H olarak deeri olarak elde edilir.

5.3.2.1.2.

ARPMA BLME LEMLER

arpma ve blme ilemleri mikrodenetleyiciler iin fazla makine evrimi isteyen komutlardr. Bu nedenle arpma ve blme ilemleri iin ekstra donamm yaplar kullanlarak bu ilemlerin sresi ksaltlmaya allr. 8051 ailesi mikrodenetleyicilerinde bu donanm vardr ve arpma ve blme ilemleri her biri 4 makine evrimi srer. Bu srenin azaltlmas aritmetik ilemlerin ok kullanld uygulamalarda genel program sresini olduka ksaltmaktadr. arpma ve blme ilemlerinde adresleme modu zel register adresleme modunda 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 96 8051 & ADuC8xx ETM NOTLARI Selim Dilma Blm 5 8051 Assembly Dilinde Programlama

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

dikkat edilmelidir. Bu nedenle bu ilemde elde bayra hibir zaman set edilmez. Sonu eer FFH deerinden bykse tama bayra set edilir. Blme ileminde ise blnecek 8 bitlik say nce A akmlatrne yklenir ardndan B akmlatrne blen say yklenir. Blme ileminin ardndan tam ksm A akmlatrnde kalan ise B akmlatrnde saklanr. Blme ileminden sonra elde bayra her zaman temizlenir sadece tama bayra 0 ile blme ilemi oluursa set edilir. B akmlatrne eer 0 ile 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 MOV B,#5 MUL AB MOV A,#99 MOV B,#5 DIV AB ;99 x 5 = 495 = 1EFH ;bu ilemin ardndan A akmlatrnde #0EFH ;B registerinde ise #01 deeri oluur. ;99 / 5 = 19 x 5 + 4

;Bu ilemin ardndan A akmlatrnde 13H ;ve B akmlatrnde 4 deeri oluur

5.3.2.1.3.

ARTTIRMA-EKSLTME LEMLER

Programlarda 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 program yazlabilir ve gerektiinde bu alt programla istenilen adrese eriilebilir. Bunun iin R0-R7 registerlarna ncelikle bloun adresi yazlr ardndan dolayl adreslemeyle bu adresin ilk blouna ulalr ve arttrma azaltma komutuyla R0-R7 registerlar azaltlarak ileme devam edilir. Alt programn sonuna bir kontrol komutu konularak belirli bir deere kadar bu ilemin tekrarlanmas salanabilir. Aada 70H-77H adreslerindeki saylarn birer arttrlarak 80H87H adreslerine yerletiren bir alt program rnei vardr:

MOV R0,70H MOV R1,80H DONGU: INC @R0 MOV A,@R0 MOV @R1,A INC R0 INC R1 CJNE R0,78H,DONGU RET

ALT1:

;kaynak blgesinin ilk adresi yklenir sonucun ;yazlaca blgenin ilk adresi yklenir 77H ;deerine kadar ileme devam edilmesi iin ;R0 n gsterdii yeri bir arttr ;bu deeri akmlatre ykle ;Akmlatrdeki deeri R1 in gsterdii yere yaz ;bir sonraki adrese git ;bir sonraki deere git ;77H deerine kadar ileme devam et ;alt programdan k

Not: Azaltma komutunda dikkat edilmesi gereken nokta azaltlacak adresteki saynn 97 8051 & ADuC8xx ETM NOTLARI Selim Dilma Blm 5 8051 Assembly Dilinde Programlama

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

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

5.3.2.1.4.

ON TABANINA GRE AYARLAMA (DECMAL AYARLAMA)

On tabanna gre ayarlama ilemi BCD saylarla toplama ilemi yapldnda oluan sonucunda BCD olmas iin tek komutluk bir ayarlama ilemi yapar. Burada toplama ileminde dk arlkl nibble lar toplanrken sonu 9 deerinden tayorsa bir st nibble toplamna 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 daha fazla ilem yaplmamas salanm olur. Not1: Onluk ayarlama ileminden nce elde bayra set edilmise bu elde dk arlkl nibble larn toplamnda toplamaya katlr. Not2: BCD deerler arttrma yada azaltma komutlaryla ilem yapldnda 9 deerinden A,B,C,D,E,F ye tama veya 0 dan azaltma ilemiyle A,B,C,D,E,F e tama hatalar oluur. Bunun yerine arttrmak iin 01, azalmak iin 99H ile toplanp ardndan DA A komutuyla tekrar BCD ekline getirilirler. Akmlatrde ve R0 da BCD olarak 48 ve 63 deerleri olsun. Bu saylar 58H ve 63H olarak 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.
5.3.2.2.1.

LOJK LEMLER
AND, OR, XOR LEMLER

Mikrodenetleyici sistemlerde sklkla kullanlan lojik ilemler burada aklanmaktadr.

Bu komutta dorudan, dolayl ve dier register adresleme modlarn kullanr. Ancak bu komutlarda bir ilem eleman ve akmlatr kullanlr. VE ve VEYA genelde baz bitleri okumak veya deitirmek ilemleri iin maskeleme ileminde kullanlr. Bu yntemle bit olarak adreslenemeyen adreslerdeki verilerde bit olarak istenilen deiiklikler yaplabilir. Aada bu ilemlere ait rnekler verilmitir.
MOV A,#18H ORL 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,#0FH ANL P1,A ;1, 2, 3, 4 numaral ledler yaklmaktadr.

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

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

5.3.2.2.2.

TMLEME-TEMZLEME LEMLER (COMPLEMENT,CLEAR)

Bu komutlarda zel register adresleme kullanlr. Elenii alma seilen adresteki btn bitlerin eleniini alr, temizleme ilemi ise seilen adresteki bitler temizlenir yani o adrese 00H deeri yazlr.
MOV A,#0AAH CPL A CLR A ; btn bitlerin elenii alnr. ; 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 saa dndrme.Srasyla bir sola dndrme ilemiyle say 2 ile arplm olur.Bu ilem iin en dk arlkl bite 0 yazlr. Saa dndrme ileminde ise kalan dikkate alnmakszn say 2 ile blnm olur. Elde ile sola dndrme ileminde ise elde bayrandaki bit en dk arlkl bit olacak ekilde sola kaydrma ilemi oluur. En arlkl bit ise elde bayrana geer. Bu komuttan nce elde bayra kontrol edilmelidir. Elde ile saa kaydrma ileminde de nce eldedeki bit en arlkl bit olacak ekilde saa kaydrma ilemi olur. En dk arlkl bit ise elde bayrana geer. Bu ilemden ncede elde bayra kontrol edilmelidir.
MOV A,#60H RR A 0 1 1 0 0 0 0 ;bu ilemin ardndan akmlatrde 30H says oluur ;say ikiye blnmtr. 0 0 0 1 1 0 0 0 0

MOV A,#13H RL A 0 0 0 1 0 0 1

;ilemin ardndan akmlatrde 26H says oluur. ;say ikiyle arplmtr. 1 0 0 1 0 0 1 1 0

MOV A,#21H SETB C RRC A

;eldeyi set et .elde en arlkl bit olur saa ;kaydrma ileminin ardndan en dk arlkl ;bit eldeye geer,akmlatrde 90H deeri oluur ;ve elde set edilir. Carry 0 0 1

5.3.2.2.4.

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

99

8051 & ADuC8xx ETM NOTLARI Selim Dilma

Blm 5 8051 Assembly Dilinde Programlama

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

Bu ilemde sadece zel register adresleme modunu kullanr. Bu komutun ardndan akmlatrdeki nibble lar baka lojik hibir ilem yapmadan deitirilmektedir. Bu komut ASCII 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 LOJK LEMLER

Lojik bit ilemleri bit olarak adreslenebilen herhangi bir adresteki bir bitle ilem yapmak iin kullanlabilir. Bu komutlarla eleniini alma, temizleme, set etme, VE ve VEYA ilemleri uygulanabilir. VE ve VEYA ilemlerinde ilk ilem eleman ve hedef elde bitidir. Ancak bu ilemin ardndan elde biti istenilen yere yazlabilir. Bu komutlarda dikkat edilmesi gereken zel register adresleme modu kullanlddr. Burada akmlatr A ile deil de ACC eklinde gstermek gereklidir. Bu komutlarn kullanld rnekler aadadr:
CLR A SETB ACC.0 SETB C ORL C,/ACC.0 ; akmlatr temizle ; akmlatrn en dk bitini temizle ; eldeyi set et ; elde ile akmlatrn en dk bitinin eleniine ; veya ilemi uygula sonucu eldeye yaz

5.3.3. PROGRAM AKII KONTROL KOMUTLARI KULLANIMI


Buraya kadar adresleme modlar, aritmetik ve lojik ilemler anlatlmaktadr. Ancak bu komutlarla programlarda olmas gereken kontrol ve bu kontrol ilemlerine gre dier ilemler yaplamaz. Bu nedenle programlarda belirli yerlerde kontroller, bu kontrollerle alt program arma ve srama komutlar gereklidir. Bu komutlar sayesinde belirli koullara gre sramalar ve dng ilemleri yaplabilir. Ayrca bu komutlar sayesinde mikrodenetleyici d sistemlerle etkileime geebilmektedir. rnek olarak seri olarak veri gndermek gerektiinde veri 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 bu alt programn iindeki kontroll bir dng yardmyla seri veri tamponundaki veri gnderilene kadar ilem beklenir. Srama ve dallanma komutlarnda imdiye kadar anlatlan komutlarda kullanlmayan bir yap kullanlr. Bu komutlarla PC ( Progaram Counter ) registerna dorudan veri yazlr. imdiye kadar anlatlanlarda ise PC mikrodenetleyici i kontrolryle komutlara gre arttrlr, srama ve dallanma komutlarnda ise gidilecek program adresi yada etiketindeki adres yazlr. Programlarda sklkla kullanlan ORG ( ORIGIN ) komutuyla ORG komutundan sonraki komutlarn bu adresten sonra program belleine yerletirilmesi salanr. Ayrca100 8051 & ADuC8xx ETM NOTLARI Selim Dilma Blm 5 8051 Assembly Dilinde Programlama

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

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

5.3.3.1. KOULSUZ DALLANMALAR


Bu komutlarda PC a gidilecek olan adres yazlr ve mikrodenetleyici bu adresteki komutu ve sonraki komutu yrtmeye balar. Bu komutlarda herhangi bir koul olmakszn srama 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 sramada ise gidilecek yerin adresi 11 bittten oluur, yani 2 kbyte lk blokluk program blgesinde herhangi bir yere srama yaplabilir. Uzun atlama komutuyla ise adres bilgisi 16 bittir ve bu 16 bitle 64 kbyte program hafzasnda istenilen yere srama yaplabilir. ndeksli atlama ise nemli bir atlama komutudur. Bu komutla ncelikle DPTR registerna atlanacak tablo yada blgedeki ilk adres yazlr ve ardndan akmlatrle indeksleme yaplarak A+DPTR adresindeki komuta srama yaplr. ndeksli srama ve dier koulsuz srama komutlarna rnekler aadadr:
MOV A,40H MOV DPTR,#TABLE JMP @a+DPTR TABLO: LJMP ALT_1 LJMP ALT_2 LJMP ALT_3 LJMP ALT_4 LJMP ALT_5 ....... ALT_1: MOV P1,#0AAH AJMP DEVAM ALT_2: MOV P1,#02H AJMP DEVAM ALT_3: MOV P1,#4BH AJMP DEVAM ALT_4: MOV P1,#12H AJMP DEVAM ALT_5: MOV P1,#56H AJMP DEVAM ; Not: burada 40H nceden baka bir program ; tarafndan belirli bir say iermektedir

; ilk alt programa sra ; ikinci alt programa sra ; .........

; P1 e AAH deerini yolla ilk komutun ; ardndan alt programn sonuna git

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

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr
............ DEVAM: .........

5.3.3.1.

KOULLU DALLANMALAR

Bu 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 olmas salanr. 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 srama ve belirli bir adresteki sayy girilen deere gre karlatrma. 2 - Azaltarak karlatrma ilemine gre srama olarak ayrlabilir. lk komutlar bitlerin set yada temizlenmesine gre srama yaparken ikinci komut yaplar byte larn adreslerdeki verilerle karlatrlp srama yaplmasn salar. Bu ikinci komut yaplar yksek seviyeli dillerdeki for ve while dnglerindeki gibi belirli kontrollere gre belirli sayda evrim alt programlar altrabilirler. Aada P1.0 a bal olan bir led 12 Mhz kristal bal bir sistemde yaklak bir saniye aralklarla yanp snmektedir.

ORG CLR BASLA: MOV MOV MOV

1000H P1.0 R0,#0FFH R1,#0FFH R2,#10H ;254 x 254 x 15 = 967740 mikro saniye bekleme ;alt program

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

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

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

5.3.3.2.

ALT PROGRAM AIRMALAR

arma komutlar alt programlarda ok nemli kullanm alanna sahiptir. Bu arma komutlar sayesinde gerekli olduu yerde alt programlar arlarak bu alt programlar altrlp alt program bittikten sonra ise ana programa tekrar dnlr. arma komutlar iki tanedir : Mutlak ve uzun arma komutlar Mutlak arma komutunda arlan alt programn adresi 11 bittir, yani 2 kbyte program blou ierisindeki herhangi bir yerden alt program arlabilir. Uzun arma komutta ise arlan alt programn adresi 16 bittir ve 64 kbyte program hafzas ierisinde herhangi bir yerden alt program arlabilir. Alt programlarn arlmas ileminde alt program adresi PC ye yklenmeden nce 16 bitlik PC registernn nce yksek sonra da dk byte yna itilir. PC yna itildikten sonra gidilecek yerin adresi PC registerna yklenir. Burada unutulmamas gereken bir nokta etiket kullanarak komut yrten dier komutlarda olduu gibi burada da etiketin olduu adres derleme ilemi srasnda belirlenir ve o etiketin kullanld btn yerlere etiketten sonraki ilk komutun program hafzasndaki adresi yazlr. Alt programlardan klp tekrar ana programa dnlmesi iin alt programlarn sonuna RET komutu yazlmaldr. Eer RET komutu alt programlarn sonuna yazlmazsa program aa doru devam eder ve hatalar oluur. Ayrca kesme alt programlarnda da benzer olarak RETI komutu kullanlr. Bu komutun RET komutuna gre fark bu komutla mikrodenetleyici bir kesme servis alt program ilemi yrttn ve bu ileme ait alt programn gerekletirildiini belirten bayraklarn set yada temizlenmesidir. RET yada RETI komutuyla yndan PC n nce dk arlkl byte sonrada yksek arlkl byte alnr ve PC bu korunmu deerlere gre ilemleri yapmaya devam eder. Bir nceki rnek bana bir etiket konup sonuna da RET konursa ve ksa srama komutu kaldrlrsa ledi yaklak bir saniye aralklarla yanp sndren bir alt program yazlm olur ve istenildii zaman arlabilir.

ORG 1000H BASLA: CLR P1.0 MOV R3,#08 LED: ACALL LED_1 DJNZ R3,LED SJMP BASLA LED_1: MOV R0,#0FFH MOV R1,#0FFH MOV R2,#16H

;8 defa ilemi tekrarla ;led yakp sndrme alt programn ar ;led etiketine giderek 8 defa ilemi tekrarla ;ilem bittiinde yanp snme ilemi ;tekrar iin ileme ;devam et ;254 x 254 x 15 = 967740 mikro saniye ;bekleme alt program

103 Blm 5 8051 Assembly Dilinde Programlama

8051 & ADuC8xx ETM NOTLARI Selim Dilma

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

BEKLE_1: DJNZ R0, BEKLE_1 DJNZ R1, BEKLE_1 DJNZ R2, BEKLE_1 CPL P1.0 RET

5.4.

8051 KOMUT SET KULLANIMINA DAR TEMEL PROGRAMLAMA RNEKLER

Assembly Dili Program rnekleri:


Buraya kadar anlatlan komut yaplar kullanlarak farkl birok program rnei verilecektir. Bu kodlar ve yaplacak gerekli deiikliklerle anlatlacak rnekler 8051 mikrodenetleyicisi ile yaplabilecek birok uygulama iin yeterli ve yol gsterici olacaktr. Program rneklerinin birer alt program olabilmesi iin bana bir etiket konmaldr ve kodun sonuna 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 alt programlarda register deerlerinin deimesidir. Bu hatalar azaltmak iin ncelikle komut yaps iyice anlaldktan sonra program yazm aamasna geilmelidir. Program ierisinde register deerlerinin deiimini nlemek iinse iki yol uygulanabilir. Birincisi alt programa girmeden nce alt programda kullanlacak registerlarn yna itilmesi ikincisi ise alt programn iinde deeri deien registerlarn yna itilmesidir. Birinci yntem alt program ayn 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 itilip sonra alt program sonunda tekrar yna ekilmesi ve mikrodenetleyicinin yn ilemleri ile zaman kaybetmemesi salanmaktadr. kinci yntem ise program ak ierisinde deeri deien registerlarn alt programn banda yna itilmesi ve alt program sonunda yndan ekilmesidir. Bu yntemin avantaj sadece o alt programda deien registerlar yna itilmektedir. Ancak bu yntemin verimli olabilmesi iin o alt programn ok fazla arlan bir alt program olmamas gerekir. Bu iki yntem programn yapsna gre uygun bir ekilde kullanlarak register deerlerinin korunmas salanabilir. Burada anlatlan rneklerde registerlarn yna itilmesi nemli olmayan durumlar dnda yaplmayacaktr. Bu nedenle buradaki alt programlarn kullanmndan nce registerlar yna itilmeli ve alt program sonunda tekrar yndan ekilmelidir. 104 8051 & ADuC8xx ETM NOTLARI Selim Dilma Blm 5 8051 Assembly Dilinde Programlama

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

5.4.1. MATEMATKSEL LEMLER


8051 komut setinde aritmetik ilemleri gerekletiren komutlar kullanlrak yaplmtr.

5.4.1.1.

BYTE LIK DEKENN TOPLAMINI HESAPLAYAN PROGRAM

;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 aralna ;sonuc (SONUC_0/1/2/3) 066H-069H adres aralna yerletirilmitir. ILK_SAYI_0 ILK_SAYI_1 ILK_SAYI_2 IKINCI_SAYI_0 IKINCI_SAYI_1 IKINCI_SAYI_2 DATA DATA DATA DATA DATA DATA 6FH 6EH 6DH 6CH 6BH 6AH ;ilk saynn deer ;deikenleri ;ikinci saynn deer ;deikenleri

SONUC_0 DATA 69H ;sonucun deer SONUC_1 DATA 68H ;deikenleri SONUC_2 DATA 67H SONUC_3 DATA 66H ;----------------------------;basit toplamada olduu gibi iki saynn en kk ;ksmlar toplanr MOV ADD JNC INC TPL_DVM0: A,ILK_SAYI_0 A,IKINCI_SAYI_0 TPL_DVM0 SONUC_1

MOV SONUC_0,A ;----------------------------;en kucuk ikinci ksmlar toplanyor MOV ADD JNC INC TPL_DVM1: ADD JNC INC TPL_DVM2: A,SONUC_1 TPL_DVM2 SONUC_2 A,ILK_SAYI_1 A,IKINCI_SAYI_1 TPL_DVM1 SONUC_2

105 Blm 5 8051 Assembly Dilinde Programlama

8051 & ADuC8xx ETM NOTLARI Selim Dilma

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

MOV SONUC_1,A ;---------------------------;byk ksmlar toplanyor MOV A,ILK_SAYI_2 ADD A,IKINCI_sAYI_2 JNC TPL_DVM3 INC SONUC_3 TPL_DVM3: ADD JNC INC MOV A,SONUC_2 TPL_DVM4 SONUC_3 SONUC_2,A

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

5.4.1.2.

N ADET BR BYTE LIK DEKENN TOPLAMINI HESAPLAYAN 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 balasn SAYAC DATA 6FH SONUC_L SONUC_H DATA DATA 6EH 6DH

MOV R0,#40H MOV SAYAC,"n" ;--------------N_TPL_DONGUSU: ADD JNC INC N_TPL_DVM: INC R0 DJNZ SAYAC,N_TPL_DONGUSU ;---------------MOV SONUC_L,A RET A,@R0 N_TPL_DVM SONUC_H

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

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

5.4.1.3.

K BYTE LIK DEKENLER ZERNDE IKARTMA LEM PROGRAMI

;31H ve 30H adreslerindeki 2 bytelk saydan ;41H ve 40H adreslerindeki say karlp sonu ;51H ve 50H adreslerinde saklanmaktadr. 16BIT_CIKARMA: MOV A,30H SUBB A,40H MOV 50H,A JNC DEVAM DEC 31H DEVAM: MOV A,31H SUBB A,41H MOV 51H,A RET

; karma ileminde elde dn ; alnyorsa 31H i azalt

5.4.1.4.
D1_H D1_L D2_H D2_L S1 S2 S3 S4

K BYTE LIK K DEKENN ARPIMINI HESAPLAYAN PROGRAM


DATA 078H 079H 07AH 07BH 07CH 07DH 07EH 07FH ;Saylarn yksek ve dk ;bytelarnn atanmas

DATA DATA DATA DATA DATA DATA DATA 077H 076H

;sonuc bytelarnn yazlaca ;adreslarin atanmas ;not:ltfen ilemden nce ;ieriklerini sfrlaynz. ;yndan eldelerin ekilebilmesi ;iin kullanlacak olan ;deikenler

ELDE1 DATA ELDE2 DATA

;Iki_16bitlik_Sayiyinin_Carpimi: ;BIRINCI BASAMAKLARIN ARPIMI MOV MOV MUL MOV MOV A,D1_L B,D2_L AB S1,A R1,B

;Sonucun birinci byten ata ;birinci arpmn yksek byten ;elde iin R1 de sakla ;IKINCI SAYININ BIR,BIRINCI SAYININ IKINCI BASAMAK CARPIMI MOV MOV MUL A,D2_L B,D1_H AB

107 Blm 5 8051 Assembly Dilinde Programlama

8051 & ADuC8xx ETM NOTLARI Selim Dilma

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

MOV PUSH

R2,A B

;ikinci carpmn dk byten ;elde iin R2 ye ata

;ikinci arpmn yksek byten ;elde iin yna gnder ;IKINCI SAYININ IKI BIRINCI SAYININ BIRINCI BASAMAK CARPIMI MOV MOV MUL PUSH A,D1_L B,D2_H AB B

;Carpmn yksek byten elde ;iin yna gnder ;IKINCI BYTE n ELDELERININ TOPLANMASI ADD JNC INC DVM: ADD JNC INC MOV A,R1 DVM S3 A,R2 DVM2 S3 S2,A ;yeni elde kontrol ;elde durumundaki arttrma

DVM2:

;yeni elde kontrol ;elde durumundaki arttrma ;toplamda gelen veriyi ;ikinci bytena ata sonucun

;IKINCI BASAMAKLARIN CARPIMI MOV MOV MUL A,D2_H B,D1_H AB

;UCUNCU BYTE n ELDELERNN TOPLANMASI POP MOV POP MOV ADD JNC INC ADD JNC INC ADD JNC INC MOV MOV ELDE1 R1,ELDE1 ELDE2 R2,ELDE2 A,R1 DVM3 S4 A,R2 DVM4 S4 A,S3 DVM5 S4 S3,A A,B ;ilk eldeyi yndan ek ;ve R1 e ata ;ikinci eldeyi yndan ek ;ve R2 ye ata ;Birinci eldeyi ekle ;yeni elde kontrol ;elde durumundaki arttrma ;yeni elde kontrol ;elde durumundaki arttrma

DVM3:

DVM4:

;yeni elde kontrol ;elde durumundaki arttrma ;sonucun cnc byten ata

DVM5:

108 Blm 5 8051 Assembly Dilinde Programlama

8051 & ADuC8xx ETM NOTLARI Selim Dilma

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

;DORDUNCU BYTEn ELDELERNN TOPLANMASI ADD MOV RET A,S4 S4,A ;Sonucun dorduncu byten ata

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 ONLAR YUZLER MOV MOV DIV DATA DATA DATA 30h 31h 32h ;BIRLER basamann tutulaca yer ;ONLAR basamann tutulaca yer ;YUZLER basamann tutulaca yer ;Ayklanacak sayy A ya ata ;B ye 100 ata ;A y B ye bl ;Not:Bu ilemin zelliinde sonuc ;Aya kalan Byte yazlr ;Sonuc olarak gelen yzler ;basaman yaz ;Geri kalan onlar ve birler ;basamaklarn A ya yaz ;B ye 10 ata ;A y B ye bl ;Onlar basaman yaz ;Birler basaman yaz

A,#k B,#100 AB

MOV MOV MOV DIV MOV MOV RET

YUZLER,A A,B B,#10 AB ONLAR,A BIRLER,B

5.4.1.6.

16 ADET BR BYTE LIK DEKENN ARTMETK ORTALAMASINI HESAPLAYAN PROGRAM

Bu alt programda 16 saynn ortalamasn alan bir alt program rnei verilmitir. 30H den 3FH e kadar olan 16 saynn ortalamas alnarak 61H adresinde saklanmaktadr. Ayrca kalan 60H adresine yazlmaktadr. ncelikle 16 say toplanmakta ve ardndan bu toplam 16 ya 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 bir saa kaydrmak ve dolaysyla varsa virgl sola kaydrmak demektir. Burada da toplanan sayy 16 ya blme ilemi iin toplam says bir nibble saa kaydrlmaktadr. Oluan toplam en fazla nibble dan oluabileceinden defa kaydrma ilemi yaplmaktadr. 109 8051 & ADuC8xx ETM NOTLARI Selim Dilma Blm 5 8051 Assembly Dilinde Programlama

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

ORTALAMA: MOV R0,#30H MOV A,30H CLR C DONGU: INC R0 ADD A, @R0 JNC DEVAM INC 41H CLR C DEVAM: CJNE R0,#3FH,DONGU MOV 40H,A BOLME: MOV A,40H ANL A,#0FH MOV 60H,A MOV A,40H ANL A,#0F0H SWAP A MOV 61H,A MOV A,41H SWAP A ADD A,61H MOV 61H,A RET

; ilk adres ;ilk deeri ykle ; sonraki ilemler iin eldeyi temizle ; ; ; ; ; bir sonraki adres deerleri topla elde oluuyorsa bir st dijiti bir arttr sonraki ilem iin eldeyi temizle

; 15 kez toplama ilemi yap ; 40H adresindeki dk nibble kalan olarak ; 60H adresine yaz ; 40H adresindeki yksek nibble 61 adresinin ; dk nibble olarak yaz ; nibble lar yer deitir ; 41H adresindeki dk ; dk nibble yksek ; 61H deki dk nibble ; akmlatrdeki yksek ;topla ve kaydet nibble ykle nibble yap ykle nibble ile

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

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

5.4.1.7.

N BYTELIK SAYININ ARET DEM

aretli saylarla direk ilem yaplamad zaman yada iaret deiimi yapmak gerektiinde bu alt programla kolayca bu ilem gerekletirilebilmektedir. Bilindii gibi iaretli saylarn en yksek arlkl byte ndaki en yksek arlkl biti 0 ise say pozitif, 1 ise say negatiftir. Pozitif bir saynn negatif karl bulunmak iin ncelikle saynn btn bitlerinin elenii ( complement ) alnr. Bu ilemin ardndan sayya 1 eklenerek istenen negatif say bulunur. Negatif bir saynn pozitif karl da ayn ekilde bulunur. Bu yntem sayesinde mikroilemci sistemlerde kolaylkla iaret dnm yaplabilmektedir. Aada verilen rnekte 20H den 2FH e kadar olan adreslerde tutulan maximum 16 byte uzunluundaki saynn iaret deiimi yaplmaktadr. Ancak istenirse bu uzunluk daha da arttrlabilir. Bu alt programda nce saynn uzunluu bulunmakta sonra bu saynn iaret deiimi yaplmaktadr.
SAYAC ELDE ISARET_DEGISIMI: MOV MOV MOV CPL ADD JNC MOV ELDE_YOK_0: MOV MOV INC DEC MOV JZ TOP: MOV CPL ADD JNC MOV ELDE_YOK: MOV MOV INC DJNZ SON: RET R0,#020H SAYAC,#10H A,@R0 A A,#01 ELDE_YOK_0 ELDE,#01 ELDE,#0 @R0,A R0 SAYAC A,SAYAC SON A,@R0 A A,ELDE ELDE_YOK ELDE,#01 ELDE,#0 @R0,A R0 SAYAC,TOP ;saynn LSB ksmnn basladg adres ;saynn kac byte oldugu bilgisi ;R0n gsterdii adresteki ilk byte ;(LSB) Aya yazlr. ;Complementi alnr. ;Sayya 1 eklenir. ;Carry yoksa dier byte gec. ;Carry varsa elde buffer na yazlr. ;Carry yoksa elde buffer temizlenir. ;Dier byte Aya alnr ;Adres deeri 1 arttrlr. ;Byte says 1 azaltlr. ;byte says kontrol iin Aya alnr. ;say bitmise(tek byte ise)SONa git ;ilk bytetan sonraki byteler dongu ;iinde tmleyenleri alnr. ;Dier byte Aya alnr ;Tmleyeni alnr. ;ELDE bufferndaki deer eklenir. ;Carry yoksa ELDE_YOK Label na git. ;Carry varsa ELDE bufferna 1 yaz. ;Carry olmamas durumunda ;ELDE buffer temizlenir. ;Byte yeni haliyle tekrar yazlr. ;adres deeri arttrlr. ;SAYAC 0 deilse TOPa git. DATA DATA 070H 071H ; saynn byte says (N deeri). ;ilemde oluan eldenin tutulaca alan

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

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

5.4.1.8.

DPTR REGSTERNN AZALTILMASI

DPTR registerini azaltmak


8051 komut sisteminde ok kullanlmad iin DPTR registerini azaltmak iin bir komut yoktur. DPTR registeri herhangi bir 16 bit adrese ulama imkan salar. 16 bit adrese yada herhangi bir srama tablosuna ulamda bir sonraki deere geme ilemi iin DPTR yazmac arttrlr. Kk bir alt programla bu azaltma ilemi kolaylkla yaplabilir. DPTR registeri iki tane 8 bitlik DPH ve DPL registerlerinden oluur. Burada azaltma ilemi iin DPL registeri azaltlmaktadr. Ancak dikkat edilmesi gereken DPL registerinde 00H deeri varsa azaltma ileminin ardndan DPL registeri FFH deerine taar. Burada nce DPL registerinden 1 karlmakta, eer 00H deerinden karma ilemi oluuyorsa elde set edileceinden DPH registerini 1 azaltlmakta elde set edilmiyorsa ilem bitmektedir.
DEC_DPTR: CLR C MOV A,DPL SUBB A,#01 JNC SON3 DEC DPH SON3: RET ;sonraki ilemler iin elde bayran ;akmlatre DPL yi ykle ;akmlatrden 1 kar ;elde set edilmemise son3 e git ;elde set edilmise DPH i azalt ;bitir ;geri dn temizle

5.4.2. BLOK AKTARMA PROGRAMLARI


Veri 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 program hazrlanmtr. 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 P2 zerinden 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 adreslenmeli sonra 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 MOV P2,#4 MOV R0,#50H MOV R1,#4FH ;hedef adresi ;kaynak adresin yksek arlkl byte ;kaynak adresin dk arlkl byte ;4FH kadar transfer yap

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

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr
GONDER: MOVX A,@R0 MOVX @DPTR,A INC R0 INC DPTR DJNZ R1,GONDER RET

;kaynaktan oku ;hedefe yaz ;kaynak iaretisini arttr ;hedef iaretisini arttr ;4FH defa ilemi yap

5.4.2.1.

INTERNAL RAM DE YER ALAN N BYTE LIK VER BLOUNU INTERNAL 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 adres<Balama Adres ; c)Hedef adres>Balama Adres ;A) YETERLI_ARALIKTA_TABLO_AKTARMA: SAYAC MOV MOV MOV DONGU: MOV MOV INC INC DJNZ RET DATA 30h R0,Bas_Adrr R1,Hdf_Adrr SAYAC,#k A,@RO @R1,A R0 R1 SAYAC,DONGU ;Sayacnn deerinin tutulaca adres. ;Balang adresini R0 a ata ;Hedef Balang adresini R1e ata ;Sayac deerini ata ;R0 n gsterdii bilgiyi Aya ata ;A nn ieriini R1 in gsterdii adrese ata ;R0 arttr ;R1 i arttr ;Sayac sfrlanana kadar dngy tekrarla ;Alt ilemden k

;NOT:BU PROGRAMDA VERLERN ST STE BNMES GB BR SORUN OLMADIINDAN BATAN BALANMITIR ;B) BELIRLI_ARALIKTA_TABLO_AKTARMA: SAYAC DATA 30h ;Sayacn deerinin tutulaca adresine ata MOV R0,Bas_Adrr ;Balang adresini R0 a ata MOV A,R0 ADD A,#kh ;Aktarma sondan balayabilmek iin MOV R0,A ;R0 k kadar tele MOV R1,Hdf_Adrr ;Hedef Balang adresini R1 e ata MOV A,R1 ADD A,#kh ;Aktarma sondan balayabilmek iin MOV R1,A ;R1 i k kadar tele MOV DONGU: MOV MOV DEC DEC SAYAC,#kh A,@RO @R1,A R0 R1 ;Sayac deerini ata ;R0 n gsterdii bilgiyi A ya ata ;A nn ieriini R1 in gsterdii adrese ata ;R0 azalt ;R1 i azalt

112

8051 & ADuC8xx ETM NOTLARI Selim Dilma

Blm 5 8051 Assembly Dilinde Programlama

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr
DJNZ RET SAYAC,DONGU ;Sayac sfrlanana kadar dngy tekrarla ;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 adres MOV R0,Bas_Adrr ;Balang adresini R0 a ata MOV R1,Hdf_Adrr ;Hedef Balang adresini R1e ata MOV SAYAC,#k ;Sayac deerini ata DONGU: MOV A,@RO ;R0 n gsterdii bilgiyi A ya ata MOV @R1,A ;A nn ieriini R1 in gsterdii adrese ata INC R0 ;R0 arttr INC R1 ;R1 i arttr DJNZ SAYAC,DONGU ;Sayac sfrlanana kadar dngy tekrarla RET ;Alt ilemden k ;NOTLAR:KK OLAN HEDEF ADRESLER KULLANILDIINDA AKTARIMA LK ;ADRESTEN BALANMASI 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 nedenle i veri bellei kullanlmaldr, i veri belleinin yetmedii durumlarda d veri bellei kullanlmaldr. veri belleinin 256 byte olmas nedeniyle ok fazla veri bellei kullanan programlarda d veri bellei de kullanmak gerekebilir. Bu alt programda i veri belleinden d veri belleine belirli bir sayda byte transferi yaplmaktadr. Bunun iin d veri belleini adreslemede DPTR register kullanlmaktadr. 30H adresinden 7FH adresine kadar olan veri bellei 1000H adresinden 104FH adresine kadar kopyalanmaktadr.
INTRAM2XRAM: MOV R0,#30H MOV DPTR,#1000H KOPYALA: MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR CJNE R0,#80H,KOPYALA RET ; kaynak ilk adresi ykle ; hedef adresini DPTR e ykle ; ; ; ; ; ; ; R0 n gsterdii adresteki deeri akmlatre al akmlatrdeki deeri DPTR nin gsterdii yere yaz kaynak adresini arttr hedef adresini arttr 30H den 7FH e kadar devam et

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

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

D veri belleinden i veri belleine veri transferi


D veri belleinde bulunan verilerin i veri belleine alnp burada ilem yaplmas gerekebilir. Bu durumda yukarda anlatlan ilem benzer bir ekilde veri transferi yaplr. Ancak burada kaynak d veri bellei hedef i veri belleidir. Alt programda 1000H adresinden 104FH adresine kadar olan veriler, i veri belleinde 30H den 7FH e kadar kopyalanmtr.
XRAM2INTRAM: MOV R0,#30H MOV DPTR,#1000H KOPYALA2: MOV A,@DPTR MOVX @R0,A INC R0 INC DPTR CJNE R0,#80H,KOPYALA2 RET ; hedef ilk adresi ykle ; kaynak adresini DPTR e ykle ;DPTR nin gsterdii adresteki deeri ;akmlatre al ;akmlatrdeki deeri R0 n gsterdii yere ;yaz ; hedef adresini arttr ; kaynak adresini arttr ; 30H den 7FH e kadar devam

5.4.2.3.

EXTERNAL RAM DE YER ALAN N BYTE LIK VER BLOUNU EXTERNAL RAM DE BAKA BR ADRESE AKTARAN PROGRAM

D veri belleinden d veri belleine veri transferi


Burada 1000H adresinden balayarak N adet veri 2000H adresinden itibaren kopyalanmaktadr.
XRAM2XRAM: MOV DPTR,#1000H MOV R0,#00H KOPYALA3: MOV DPH,#10H MOVX A, @DPTR MOV DPH,#20 MOVX @DPTR,A INC DPTR INC R0 CJNE R0,#30H,KOPYALA3 RET ;kaynak adresini ykle ;R0 sfrla ;kaynak adresi iin DPH 10H,yani DPTR ye 1000H ;ykle ve bu adresten akmlatre kopyala ;DPH a 20H, yani DPTR ye 2000H deerin ykle ;akmlatrdeki sayy DPTR nin gsterdii ;yere yaz ;DPTR yi arttr ;kopyalama ilemi says iin R0 arttr ;47 defa kopyalama ilemi yap

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

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

5.4.2.4.

K ADET DPTR KULLANARAK XRAM DE BLOK AKTARMA PROGRAMI

ki DPTR kullanarak XRAM den XRAM e veri transferi


XRAM kullanarak veri transferi yaplan ilemlerde adresi gstermek iin DPTR registeri kullanlr, ancak XRAM den XRAM e veri tarnsferi yapabilmek iin iki DPTR registeri kullanmak gereklidir. ki DPTR registeri olmad durumlarda ikinci bir DPTR registeri yazlmla oluturulabilir. Burada DPTR registerinin DPH ve DPL registerlerini kullanarak ikinci bir DPTR registeri varm gibi ilem yaplabilir. Bunun iin iki adres DPH ve DPL registerlerine kopyalanarak DPTR registeri iki ilem iinde kullanlabilir. Bylece XRAM den XRAM e veri tarnsferi yapmak mmkn olabilmektedir. Bu alt programda 1000H adresinden balayarak N adet byte 2000H adresinden balayarak kopyalanmaktadr. 30H adresinde N adet byte bilgisi tutulmaktadr.
XRAM2XRAM: MOV DPTR,#2000H MOV 40H,DPL MOV 41H,DPH MOV DPTR,#1000H GONDER: MOVX A, @DPTR INC DPTR PUSH DPH PUSH DPL INC 40H CJNE 40H,#00,DEVAM INC 41H DEVAM: MOV DPH,41H MOV DPL,40H MOVX @DPTR,A POP DPL POP DPH DJNZ 30H,GONDER RET

; 40H adresinde FFH den 00H e ; tama varsa 41H arttr.

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

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

5.4.3. ARAMA PROGRAMLARI


5.4.3.1. KARILATIRMA PROGRAMLARI
;Belli bir k boyutlu adres aralndan oluan bir tablodaki blmlerde bulunan deerler arasnda ; ; ; ; ;A) EN_KUCUK_DEGER: EN_KUCUK DATA SAYAC DATA 30h MOV MOV MOV CIKAR: MOV SUBB JNC DEGISME: INC MOV DJNZ RET DEGIS: MOV MOV INC MOV DJNZ RET A,R1 R0,A R1 EN_KUCUK,R0 SAYAC,CIKAR R0,#TUT R1,#TUT+1 SAYAC,#k A,@R0 A,@R1 DEGIS 31h ;Sonucun saklanaca yeri belirle ;Sayac deerinin saklanaca yeri ;belirle ;lk tutulacak saynn adresine ;yaz ;lk karlatrlacak saynn ;adresi ;Sayacn deerini ata ;Bu blmde R0 da gsterdiimiz ;saydan R1 de gsterdiimiz sayy ;kararak ;elde oluup olumadna gre ;daha kk olan say belirlenir ;Elde durumuna gre atlama veya devam ;etme(elde yoksa atla) ;Bir dahaki say iin R1 i arttr ;En kk say adresine R0 ata ;Bir dahaki sayy deneme ilemine; ;ge ;Alt ilemi bitir ;A yardm ile R1 ieriini al ;A y R0 iine yaz ;Bir dahaki say iin R1 i arttr ;En kk say adresine R0 ata ;Bir dahaki sayy deneme ilemine ;ge ;Alt ilemi bitir a)En kk sayy bul b)Tek saylarn adedini bul c)ift saylarn adedini bul d)En byk sayy bul

R1 EN_KUCUK,R0 SAYAC,CIKAR

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

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr
;B) TEK_SAYI_ADEDI: ADET DATA SAYAC DATA MOV MOV SORGU: MOV ANL 30h 31h ;Tek say adedinin tutulaca blm ;Sayacn tutulaca blm ;Adet ieriini sfrla ;R0 a ilk adresi ata ;Sorgu ilemi Saynn 000000001b ;saysyla AND ;Kaps kullanlarak yaplr ve ANL ;komutunun zelliinden ;sonuc 1 veya 0 olarak A ieriine ;yazlr ;A nn ierii 0 deil ise TEK ;etiketine atla ;A nn ierii 0 ise R0 arttr ;Yeni sayy sorgulamak iin baa dn ;Tek say ise ;ADET ieriini arttr ;R0 arttr ;Yeni sayy sorgulamak iin baa dn

ADET,00h R0,#BASAdrr A,#00000001b A,@R0

JNZ

TEK

INC R0 DJNZ SAYAC,SORGU RET TEK: INC ADET INC R0 DJNZ SAYAC,SORGU RET

;C) ift say adedini bulma ;Bu alt programda 30H den 40H kadar olan adresteki saylar ;iinden ift say adedi bulunmakta ve 50H adresinde ka tane ;olduu gsterilmektedir. Elde ile birlikte dndrme komutu ;kullanlarak son bitin 0 veya 1 olmasna gre ift yada tek ;olmasna baklr. CIFT: MOV R0,#30H

MOV A, @R0 INC R0 RRC A JC DEVAM INC 50H DEVAM: CJNE R0,40H,CIFT RET ;D) EN_BUYUK_DEGER: EN_BUYUK DATA SAYAC DATA MOV MOV MOV R0,#TUT R1,#TUT+1 SAYAC,#k 31h 30h ;Sonucun saklanaca yeri belirle ;Sayac deerinin saklanaca yeri ;belirle ;lk tutulacak saynn adresini yaz ;lk karlatrlacak saynn adresi ;Sayacn deerini ata

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

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr
CIKAR: MOV SUBB JC DEGISME: INC MOV DJNZ RET DEGIS: MOV MOV INC MOV DJNZ RET A,R1 R0,A R1 EN_BUYUK,R0 SAYAC,CIKAR

A,@R0 A,@R1 DEGIS

;Bu blmde R0 da gsterdiimiz ;saydan R1 de gsterdiimiz sayy ;kararak ;elde oluup olumadna gre daha ;byk olan say belirlenir ;Elde durumuna gre atlama veya devam ;etme(elde varsa atla) ;Bir dahaki say iin R1 i arttr ;En byk say adresine R0 ata ;Bir dahaki sayy deneme ilemine ge ;Alt ilemi bitir ;A yardm ile R1 ieriini al ;A y R0 iine yaz ;Bir dahaki say iin R1 i arttr ;En byk say adresine R0 ata ;Bir dahaki sayy deneme ilemine ge ;Alt ilemi bitir

R1 EN_BUYUK,R0 SAYAC,CIKAR

5.4.4. VER FORMATI DNTRME PROGRAMLARI


5.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 saylardan binary saylara dnm ilemi iin iki alt program yazlmtr. BCD saylarla ilem bildiimiz 10 tabannda yaplan ilemlerin 16 tabanndaki mikrodenetleyici sistemlerle yaplan ilemler arasnda dnm iin kullanlr. Binaryden BCD ye dnm yapan alt programda 30H de bulunan say dnm ileminden sonra onlar ve birler basama 40H de yzler basama ise 41H de saklanmaktadr. BCD den binary e dnm ileminde 30H adresindeki say dnm ilemi ardndan 40H adresinde saklanmaktadr.

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

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr
BINARY2BCD: MOV MOV DIV MOV MOV A,30H B,#0AH AB 40H,B B,#0AH ; ; ; ; birler basaman 40h adresine yaz ; ; ; ; ; ; ; ; yzler basaman 41H adresine yaz onlar basaman akmlatre yaz onlar basama olarak deitir onlar basaman birler basamayla topla ve sonucu 40H adresine yaz

DIV AB MOV 41H,A MOV A,B SWAP A ADD A,40H MOV 40H,A RET BCD2BINARY: MOV A,30H ANL A,#0F0H SWAP A MOV B,#0AH ; MUL AB MOV A,B MOV 32H,A MOV A,30H ANL A,#0FH ADD A,32H MOV 40H,A RET

; ;alt nibble n sil ;nibble lar deitir ; ; ;Adaki say geici olarak 32H yaz ; ;st nibble n sil ;geici deerle topla ; sonucu yaz

5.4.4.2.

BINARY VE ASCII DNMLER

Haberleme sistemlerinde ve deiik uygulamalarda sklkla kullanlan binary ve ASCII dnmleri iin kullanlan iki alt program yazlmtr. Bilindii gibi ASCII tablosu 256 karakterden olumaktadr. Bunlardan 30H ve 39H arasndaki semboller 0-9 saylardr. Hexadecimal sistemde kullanlan A-F ise 41H ve 46H arasnda bulunmaktadr. Ayrca a-f kk harfleri de 61H ve 66H arasnda bulunmaktadr. Binaryden ASCII ye dnm ileminde nce R0 alnan binary deerin say m harf mi olduuna baklmakta ardndan buna gre say ise o sayya 30H, harf ise 61H eklenmektedir. Bu kontrol ilemi o akmlatrdeki deerden 10 karlmaktadr. Eer say ise karma ileminde karlan say kan saydan byk olacaktr ve elde bayra set edilmeyecektir, karlan say kan saydan kk ise elde bayra set edilerek o deere 41H deeri eklenecektir. Burada A-F arasndaki harf deerlerine 41H eklenerek ASCII tablosundaki byk harfler kullanlmtr. Gerektiinde bu deerlere 61H yerine 41H eklenerek 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 119 8051 & ADuC8xx ETM NOTLARI Selim Dilma Blm 5 8051 Assembly Dilinde Programlama

Haluk Turksoy Sk, No:11 ALTUNIZADE, 34662 ISTANBUL-TURKEY TEL: +90 216 6518000 FAX: +90 216 6518009 http://www.elektro.com.tr info@elektro.com.tr

bir kontrol daha yaplmaktadr. ki alt programda da girilen deer R0 a kan sonu ise akmlatrde saklanmaktadr.
BINARY2ASCII: MOV A,R0 CLR C SUBB A,#0AH JNC SAYI ADD A,#41H JMP SON SAYI: MOV A,R0 ADD A,#30H SON: RET ASCII2BINARY: MOV A,R0 CLR C SUBB A,#41H JNC SAYI2 ADD A,#0AH JMP SON2 MOV A,R0 SUBB A,#61H ADD A,#0AH JNC SAYI2 SAYI2: MOV A,R0 SUBB A,#30H SON2: RET ;R0 daki deeri akmlatre ykle ;sonraki ilemler iin elde bayran ;temizle ;say m harf mi olduunu bulmak iin ;10 kar ;elde set edilmemise say ilemine ge ;elde set edilmise 41H ekle ;ilemi bitir ;elde set edilmemise say ilemi ;deeri akmlatre ykle ;say iin 30H ekle ;bitir ;alt programdan geri dn ;R0 daki deeri akmlatre ykle ;sonraki ilemler iin elde bayran ;temizle ;say m byk harf mi olduunu bulmak ;iin 41H kar ;elde set edilmemise say2 ilemine ge ;byk harf iin kan deere 10 ekle ;ilemi bitir ;R0 daki deeri akmlatre ykle ;say m kk harf mi olduunu bulmak ;iin 61H kar ;kk harf iin kan deere 10 ekle ;ilemi bitir ;elde set edilmise say ilemi ;R0 daki deeri akmlatre ykle ;say deeri iin 30H ekle ;bitir ;geri dn

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

You might also like