Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

assembly carry flag

Başlatan zenze, 26 Aralık 2002, 19:58:00

zenze

O.Altınbaşağın kitabını

inceliyorum
F-W işlemi için
F Büyük W ise  C= 1
F=W ise            C=1
F küçük W ise  

C=0
demiş ve programları buna göre yazmış
Carry flag değerleri doğru mu doğruysa açıklarmısınız yada

doğrusunu yazarsanız sevinirim

AlundrA

merhaba mikroişlemcilerde toplama işlemi aynen onluk

sistemdeki gibi yapılır yani örnek olarak 9 ile 13 ün toplanmasında şu yol izlenir
9      00001001
13     

00001101
+
-------
22     00010110


görüldüğü gibi 1 ile 1 toplandığında 2

sayısı elde edilir ve bu sayı elde var 1 anlamına gelir sonuç olarak sıfır yazılır ve eldeki 1 bir basamak soldaki sayıyla toplanır biraz

dikkat ederseniz işlemlerin aynen ondalık sistem gibi olduğunu görürsünüz. Gelelim çıkarma işlemine çıkarma işlemi aslında bir

toplama işlemidir birinci sayı aynen yazılır ikinci sayının ise negatifi alınır ve birinci sayıyla toplanır bir sayının negatifini almak

demek o sayının tersini alıp 1 eklemek demektir (ikiye tümleyen) örneğin dokuzun tümleyeni
9        

00001001
değili   11110110
+1       11110111
    


şu durumda 13 den 9 çıkarma

işlemi
13     00001101
-9     11110111
+
-----
4       

00000100

şeklinde olur ve bu durumda en son basamağın toplanması sırasında hala elde bir

olduğundan bu elde carry biti olarak yazılır 9 dan 13 çıkarılması ise aynı şekilde  
9      00001001
-13  

  11110011
+
------
-4      11111100   sonuç eksi olduğundan tümleyeni alınır
tersi   00000011
+1      

00000100  yani -4

bu işlem yapıldığında sonuçta bir elde çıkmayacağından carry biti sıfır

kalacaktır. eşit olma durumuda benzer şekilde elde edilebilir.

evet bilmeyenler için biraz ayrıntılı anlattım umarım işinize

yarar bir hata etmişsem söyleyin  iyi çalışmalar  8)
yapabilirim!

AlundrA

bu işlemler  genelde karşılaştırma yapma amaçlı kullanılır

yani bir sayının diğerinden büyük olup olmadığı kontrol edilmek istendiğinde sayı diğerinde çıkarılır ve carry bitinin durumuna

bakılır bir çok  işlemcide bulunan cmp (compare-karşılaştır) komutu bu şekilde çalışmaktadır.

sırası gelmişken iki sayının

eşit olup olmadığıda benzer şekilde zero bayrağı kontrol edilerek yapılır yani çıkarma işlemi sonucunda eğer sayılar eşitse sonuç sıfır

olur ve zero bayrağı set(1) olur değilse zero bayrağı resettir(0)
yapabilirim!

zenze

teşekkürler tersleyip bir ekleme olayı işi çözdü

AlundrA

rica ederim yardımcı olabilmişsem ne mutlu bana :D



bu arada şunuda belirteyim çıkarma işlemi için başka yöntemlerde var fakat pic ve birçok işlemci 2 nin tümleyeni

yöntemini kullanıyor.
yapabilirim!

zenze

Bir şey daha sormak istiyorum
Çok kafa yordum ama

kitapta sanırım yalnışlık var.
SUBLW Komutu kullanılarak [b]sadece sabitin büyük [/b]olduğu

zaman  programı dallandıran programcık nasıl olur yazabilirmisiniz. Eşit ve küçük olma durumlarında dallanma yok ve  sadece  

carry flag kontrol edilerek
   Sadece carry bitine bakarak sadece büyük durum (eşit olma durumuda istenmiyor) ayrılabilirmi(z

ye bakmadan)
kitap olur demiş ama verdiği örnek olmuyor
Teşekkürler.

AlundrA

Bahsettiğiniz kodu şu şekilde yazabiliriz

örneğin

a>2 ise a yı bir arttır

MOVF   21,W    ;21 a'nın bulunduğu adres
SUBLW  02   ;sublw işlemi

operandından (burada 2 sayısı) akümülatörü (w) çıkarır akümülatörde a sayısı bulunduğundan sublw 02 işlemi 2-a anlamına

gelir.
BTFSS  03,0   ;eğer 2-a işlemi sonucunda carry oluşmuşsa bir sonraki işlemi atla
INCF   21,F   ;a'yı bir

arttır.

görüldüğü üzere incf 21,f işlemi ancak carry biti reset (0) olduğunda gerçekleşecek bunun olması için ise a

sayısının 2 den büyük olması lazım. yani anlayacağınız işlemler carrynin set olmasına göre değilde set olmamasına göre yapılıyor ki

mantıklı olanda bu :)
yapabilirim!

AlundrA

bide size tavsiyem eğer pic assembly öğrenmeye

çalışıyorsanız kitap ile birlikte önünüze 16f84 ün datasheet'inide açın datasheet'te instruction set  bölümünde buna benzer bir

çok ayrıntı var her komut için

hadi kolay gelsin  :)
yapabilirim!

zenze

söz son soru
birde a küçük(= değil) 2 için


yazabilirmisiniz
teşekkürler

AlundrA

Tekrar merhaba bunuda şöyle bir örnekle açıklamaya

çalışayım.

a<2 ise a yı bir arttır

MOVF   a,w  
SUBLW  01
BTFSS  03,0
INCF  

a,f

burada da dikkat edilmesi gereken şey sayının küçük olup olmadığını test etmek için test edeceğimiz sayının bir

küçüğünü kullanmak, böylelikle a=2 ise çıkarma işlemi 1-2 olacağından sonuç c=0 çıkacaktır a=3 ise işlem 1-3 olacağından c=0

olacaktır. ancak a<2 iken mesela a=1 iken 1-1 işlemiyle c=1 olacaktır veya 1-0 c=1 gibi

merak etme dostum istediğin

kadar sorabilirsin uzun zaman C ile  uğraşmaktan assembly bilgim biraz paslanmış böylelikle biraz tekrar yapmış oluyorum. :D



hadi kolay gelsin. 8)
yapabilirim!

muratyamak10

mssp ile yani spi iletişim ile max7219 sürücülü ortak katot display
devrenin kaynak kodu
            list   p=16F877A
                  #include "p16F877A.inc"
                  __config H'3F31'
MSpi_Veri         equ      0x20
Max7219_Data1     equ      0x21
Max7219_Data2     equ      0x22
i                 equ      0x23
                  ORG      0
                  clrf     PCLATH
                  goto     ana_program
Master_Spi_Kur
                  Banksel  TRISC
                  movlw    0xC5
                  andwf    TRISC,F
                  movlw    0x10
                  iorwf    TRISC,F
                  movlw    0x40
                  movwf    SSPSTAT
                  bcf      STATUS,RP0
                  clrf     SSPCON
                  bsf      SSPCON,5
                  return
Master_Spi_Yaz
                  movf     MSpi_Veri,W
                  Banksel  SSPBUF
                  movwf    SSPBUF
MSpi_Yaz_j1
                  Banksel  SSPSTAT
                  btfss    SSPSTAT,BF
                  goto     MSpi_Yaz_j1
                  return
Max7219_Yaz
                  Banksel  PORTC
                  bsf      PORTC,1
                  movf     Max7219_Data1,W
                  movwf    MSpi_Veri
                  call     Master_Spi_Yaz
                  return
Max7219_Yaz2
                  movwf    MSpi_Veri
                  call     Master_Spi_Yaz
                  bcf      STATUS,RP0
                  bcf      PORTC,1
                  return

Max7219_Kur
                  movlw    0x09
                  movwf    Max7219_Data1
                  call     Max7219_Yaz
                  movlw    0xFF
                  call     Max7219_Yaz2
                  movlw    0x0A
                  movwf    Max7219_Data1
                  call     Max7219_Yaz
                  movlw    0x0F
                  call     Max7219_Yaz2
                  movlw    0x0B
                  movwf    Max7219_Data1
                  call     Max7219_Yaz
                  movlw    0x07
                  call     Max7219_Yaz2
                  movlw    0x0C
                  movwf    Max7219_Data1
                  call     Max7219_Yaz
                  movlw    0x01
                  call     Max7219_Yaz2
                  clrf     Max7219_Data1
                  call     Max7219_Yaz
                  movlw    0xFF
                  call     Max7219_Yaz2
                  movlw    0x0F
                  movwf    Max7219_Data1
                  call     Max7219_Yaz
                  movlw    0x00
                  call     Max7219_Yaz2
                  return
ana_program
                  call     Master_Spi_Kur
                  call     Max7219_Kur
                  banksel  PORTC
dongu
                  movlw    .1
                  movwf    Max7219_Data1
                  call     Max7219_Yaz
                  movlw    .1
                  call     Max7219_Yaz2
                  movlw    .2
                  movwf    Max7219_Data1
                  call     Max7219_Yaz
                  movlw    .2
                  call     Max7219_Yaz2
                  movlw    .3
                  movwf    Max7219_Data1
                  call     Max7219_Yaz
                  movlw    .3
                  call     Max7219_Yaz2
                  movlw    .4
                  movwf    Max7219_Data1
                  call     Max7219_Yaz
                  movlw    .4
                  call     Max7219_Yaz2
                  movlw    .5
                  movwf    Max7219_Data1
                  call     Max7219_Yaz
                  movlw    .5
                  call     Max7219_Yaz2
                  movlw    .6
                  movwf    Max7219_Data1
                  call     Max7219_Yaz
                  movlw    .6
                  call     Max7219_Yaz2
                  movlw    .7
                  movwf    Max7219_Data1
                  call     Max7219_Yaz
                  movlw    .7
                  call     Max7219_Yaz2
                  movlw    .8
                  movwf    Max7219_Data1
                  call     Max7219_Yaz
                  movlw    .8
                  call     Max7219_Yaz2
                  goto     dongu
                  END
                 
[IMG]http://img820.imageshack.us/img820/1351/max7219.png[/img]

Uploaded with ImageShack.us burdaki pic16f877 ile şeması