Güncel Oyun & Program & Resim & Msn Forumu
Elektronik Bölümü icinde Pic Programlama Ders - 14 konusu , DERS - 14 Daha önce pek çok komut ögrendik, bu kez aritmetik islemlerde kullandigimiz bazi komutlari ögrenelim. ADDLW : Bu komut bir sabit ile write register içerigini toplar, sonuç write ...
|
|||||||
| Anlık İletiler | Kayıt ol | Yardım | Üye Listesi | Ajanda | Arama | Bugünki Mesajlar | Forumları Okundu Kabul Et |
|
|
|
DERS - 14
Daha önce pek çok komut ögrendik, bu kez aritmetik islemlerde kullandigimiz bazi komutlari ögrenelim. ADDLW : Bu komut bir sabit ile write register içerigini toplar, sonuç write register içine yazilir. ADDWF : Bu komut file register ile write register içerigini toplar ve sonuç file veya write registere yazilir. SUBLW : Bu komut bir sabitten write registeri çikarir ve sonuç write register içine yazilir. SUBWF : Bu komut file register den write registeri çikarir ve sonuç file veya write registere yazilir. 0-255 sayilari 256 tane sayi demektir ve bu da 8 bit tir yani 2 ^ 8 demektir. Iki sayi toplami bir byte dan daha büyük olursa yani ; A + B³256 ise bu durumda bilgi bir byte dan daha büyük oldugu için carry flag da degisme 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 ISLEM SONUÇ CARRY FLAG A + B <= 255 0 A + B >= 256 1 A – B pozitif 1 A – B negatif 0 Toplama ve çikarma islemleri 8 bit ise islem kolaydir. Eger daha büyük sayilar ‘in toplama ve çikarmasi söz konusu ise 16 bit islemi yapilir ve burada 8 bitlik iki register kullanilir. . . Toplama ve çikarma islemlerini decimal, hexadecimal veya binary olarak yapabiliriz.Daha evvel hexadecimal ve binary sayi sistemlerini ögrenmistik. Bu yazimizda kolaylik olsun diye Bir sayi sistemleri tablosu verilmektedir. Bu tablo kullanilarak hexadecimal toplamlar’in decimal ve binary karsiliklari karsilastirilabilir. Hexadecimal iki sayi toplami 255 den büyük ise carry flag 1 olur demistik. Örnegin asagidaki toplamalara bakalim. H’02’ + H’FD’ = H’FF’ = 255 olur tasma yoktur. H’06’ + H’FD’ = H’03’ = 3 olur tasma mevcuttur (burada toplama islemi 255 den sonra 4 kademe ilerler ve 0 1 2 3 rak----- ulasir). TOPLAMA 8 BIT TOPLAMA 8 bitlik iki sayiyi toplamak için iki yol ve iki komut mevcuttur. ADDLW komutu kullanilarak write register içine yazili olan bir sayi bir sabit ile toplanir.,veya; ADDWF komutu kullanilarak bir file register içindeki sayi write register içindeki sayi ile toplanir. MOVLW H’02’ ;decimal 2 sayisini write registere yaz ADDLW H’FD’ ;decimal 253 sayisini write register ile topla MOVWF PORTB ;sonuç 255 sayisini yani binary 8 bit 1 sayisini portb ye gönder Burada port b ye bagli ledler varsa hepsi yanar, veya : EQU SAYAC H’0C’ ; Sayac registeri tanimla MOVLW H’EE’ ; Write registere 238 decimal sayisini yaz MOVWF SAYAC ; Sayac’a 238 i yaz ADDWF H’12’ ; Decimal 18 sayisi ile topla BTFSS STATUS, 0 ; Carry flag 1 ise atla 16 BIT TOPLAMA Iki sayinin toplami bir byte dan yani 256 ve daha büyük ise 16 bit toplama islemi gerekir bu sekilde 2 ^ 16 yani 65535 ‘ e kadar sayilarin toplama islemini yapabiliriz. Burada yapilacak olan bir byte bilgiyi bir registere , diger byte bilgiyi bir baska registere olmak üzerte iki file register kullanmak olacaktir. Rakamin toplaminda bir bytdan büyük sonuç çikip tasma meydana gelirse,carry flag vasitasiyla elde bir,diger registerin ilk basamagina 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 Tasma oldugunda 8. Bitten sol byte’in ilk bitine 1 ilave edilir.Bu bit 0 yerine 1 olur. 16 bit toplamada 4 adet register gerekir.Her bir sayi iki registere bölündügü için iki sayi için 4 register gerekir.Sayi hexadecimal ise yarisi olan 2 basamak bir registere ,diger yarisi bir baska registere yazilir.Sayi binary ise 8 bit bir registere ,diger 8 bit bir baska registere yazilir. ÇIKARMA ISLEMI : Çikarma islemi toplama islemi gibidir.Kullanilan komutlari yukarida görmüstük.8 bit çikarmada sonuç negatif ise carry flag 0 sonuç pozitif ise carry flag 1 dir.16 bit çikarmada sol registerden bir ödünç alma varsa carry flag 0 olur ve DECF komutu ile sol register 0.bitten 1 çikartilarak isleme devam edilir. |
![]() |
| Seçenekler | |
| Stil | |
|
|
| LinkBack |
LinkBack URL |
About LinkBacks |
| Bookmark & Share |
Digg this Thread! |
Add Thread to del.icio.us |
Bookmark in Technorati |
Furl this Thread! |