Professional Documents
Culture Documents
http://www.elektro.com.tr info@elektro.com.tr
5.1.
ASSEMBLERA GR
Assembly mnemonic olarak adlandrlan komut yaplarndan oluan makine kodundan sonra en alt seviyelide yer alan bir programlama dilidir.
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 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.
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
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.
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.
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.
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
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
5.3.
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.1.
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 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.
0EEH
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
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.
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
5.3.1.4.
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.
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.
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
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
5.3.1.7.
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 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
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.
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.1.
ARTMETK LEMLER
5.3.2.1.1.
94
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.
....
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
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 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
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 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
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.
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.
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 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
;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.
99
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.
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
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.
; 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.
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.
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
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.
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.1.
;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
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.
;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.
;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
5.4.1.4.
D1_H D1_L D2_H D2_L S1 S2 S3 S4
;sonuc bytelarnn yazlaca ;adreslarin atanmas ;not:ltfen ilemden nce ;ieriklerini sfrlaynz. ;yndan eldelerin ekilebilmesi ;iin kullanlacak olan ;deikenler
;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
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 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
;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:
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.
;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
5.4.1.6.
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.
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.
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
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.
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
5.4.2.3.
EXTERNAL RAM DE YER ALAN N BYTE LIK VER BLOUNU EXTERNAL RAM DE BAKA BR ADRESE AKTARAN PROGRAM
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.
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
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
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
;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
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.
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