Adım Adım PIC Öğreniyorum 14
Hesaplamaları öğrenmeye devam ediyoruz. Toplama, çıkartma gibi işlemleri nasıl yaptırabiliriz? Bu yazıda!
Daha önce pek çok komut öğrendik, bu kez aritmetik işlemlerde kullandığımız bazı komutları öğrenelim.
ADDLW : Bu komut bir sabit ile write register içeriğini toplar, sonuç write register içine yazılır.
ADDWF : Bu komut file register ile write register içeriğini toplar ve sonuç file veya write registere yazılır.
SUBLW : Bu komut bir sabitten write registeri çıkarır ve sonuç write register içine yazılır.
SUBWF : Bu komut file register den write registeri çıkarır ve sonuç file veya write registere yazılır.
0-255 sayıları 256 tane sayı demektir ve bu da 8 bit tir yani 2 ^ 8 demektir. İki sayı toplamı bir byte dan daha büyük olursa yani ;
A + B³256 ise bu durumda bilgi bir byte dan daha büyük olduğu için carry flag da değişme olur. Sonuç 8 bit ise carry flag 0 , 8 bitten fazla ise carry flag 1 olur.
A – B sonucu negatif ise Carry flag 1
A – B sonucu pozitif ise Carry flag 0 olur
İŞLEM | SONUÇ | CARRY FLAG |
A + B | £ 255 | 0 |
A + B | ³ 256 | 1 |
A ' B | pozitif | 1 |
A ' B | negatif | 0 |
Toplama ve çıkarma işlemleri 8 bit ise işlem kolaydır. Eğer daha büyük sayılar 'ın toplama ve çıkarması söz konusu ise 16 bit işlemi yapılır ve burada 8 bitlik iki register kullanılır.
Toplama ve çıkarma işlemlerini decimal, hexadecimal veya binary olarak yapabiliriz.Daha evvel hexadecimal ve binary sayı sistemlerini öğrenmiştik. Bu yazımızda kolaylık olsun diye Bir sayı sistemleri tablosu verilmektedir. Bu tablo kullanılarak hexadecimal toplamlar'ın decimal ve binary karşılıkları karşılaştırılabilir.
Hexadecimal iki sayı toplamı 255 den büyük ise carry flag 1 olur demiştik. Örneğin aşağıdaki toplamalara bakalım.
H'02' + H'FD' = H'FF' = 255 olur taşma yoktur.
H'06' + H'FD' = H'03' = 3 olur taşma mevcuttur (burada toplama işlemi 255 den sonra 4 kademe ilerler ve 0 1 2 3 rakamına ulaşır).
TOPLAMA
8 BİT TOPLAMA
8 bitlik iki sayıyı toplamak için iki yol ve iki komut mevcuttur.
ADDLW komutu kullanılarak write register içine yazılı olan bir sayı bir sabit ile toplanır.,veya;
ADDWF komutu kullanılarak bir file register içindeki sayı write register içindeki sayı ile toplanır.
MOVLW H'02' ;decimal 2 sayısını write registere yaz
ADDLW H'FD' ;decimal 253 sayısını write register ile topla
MOVWF PORTB ;sonuç 255 sayısını yani binary 8 bit 1 sayısını portb ye gönder
Burada port b ye bağlı ledler varsa hepsi yanar, veya :
EQU SAYAC H'0C' ; Sayac registeri tanımla
MOVLW H'EE' ; Write registere 238 decimal sayısını yaz
MOVWF SAYAC ; Sayac'a 238 ı yaz
ADDWF H'12' ; Decimal 18 sayısı ile topla
BTFSS STATUS, 0 ; Carry flag 1 ise atla
16 BİT TOPLAMA
İki sayının toplamı bir byte dan yani 256 ve daha büyük ise 16 bit toplama işlemi gerekir bu şekilde
2 ^ 16 yani 65535 ' e kadar sayıların toplama işlemini yapabiliriz.
Burada yapılacak olan bir byte bilgiyi bir registere , diğer byte bilgiyi bir başka registere olmak üzerte iki file register kullanmak olacaktır. Rakamın toplamında bir bytdan büyük sonuç çıkıp taşma meydana gelirse,carry flag vasıtasıyla elde bir,diğer registerin ilk basamağına ilave edilir.
Bit | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
S1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
S2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
Taşma olduğunda 8. Bitten sol byte'ın ilk bitine 1 ilave edilir.Bu bit 0 yerine 1 olur.
16 bit toplamada 4 adet register gerekir.Her bir sayı iki registere bölündüğü için iki sayı için 4 register gerekir.Sayı hexadecimal ise yarısı olan 2 basamak bir registere ,diğer yarısı bir başka registere yazılır.Sayı binary ise 8 bit bir registere ,diğer 8 bit bir başka registere yazılır.
ÇIKARMA İŞLEMİ :
Çıkarma işlemi toplama işlemi gibidir.Kullanılan komutları yukarıda görmüştük.8 bit çıkarmada sonuç negatif ise carry flag 0 sonuç pozitif ise carry flag 1 dir.16 bit çıkarmada sol registerden bir ödünç alma varsa carry flag 0 olur ve DECF komutu ile sol register 0.bitten 1 çıkartılarak işleme devam edilir.
Bu yazı ile ilgili yaz14-hex-bin-dec.xls dosyasını indirmek için tıklayınız.