Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: F493 - 29 Eylül 2007, 12:31:32

Başlık: carry biti
Gönderen: F493 - 29 Eylül 2007, 12:31:32
Selam arkadaşlar benim bir sorum olucaktı.

 Yazılım olarak asm kullanıyorum.

    8 bitlik 2 adet register'ım var  ,bu iki registere porttan gelen  önce yüksek anlamlı olmak üzere, 16 biti yerleştirmek istiyorum.

 Anladıgım kadarıyla rlf reg1,f şeklinde sola kaydıracagım ,8 bit taştıgında ise taşan deger carry bitinde olcak.Mantıgını anladım ancak 8.biti geçtikten sonra carry'de olan degeri 2.registerden nasıl devam ettirecegim,yani carry'deki degeri 2.reg. nasıl aktaracagım.

   Teşekkürler
Başlık: carry biti
Gönderen: XX_CİHAN_XX - 29 Eylül 2007, 15:12:23
Selam,
Olayı kavramış sayılırsın.Tam olarak anlaman için yardımcı olayım.Carry biti adındanda anlaşılacağı üzere elde (taşma) bitidir.2 tane 8 bitlik registerimiz var.Bunlara REGH ve REGL diyelim.
Sola kaydırma (RLF) komutunu aşağıdaki resimlede gösterelim.
(http://hobby_elec.piclist.com/gif/pic_rlf1e.gif)
Görüldüğü üzere sola kaydırma komutu çalıştığında carry deki bit kaydırdığın registerin başına(0. bite) geçer ve 8. bit ise carry e geçer.
Sen porttan aldığın veriyi önce carry e yerleştireceksin.Şimdi sıra bu biti içeri almaya geldi.Örnek kod üzerinde anlatsam daha iyi olacak.

  MOVLW   .16
  MOVWF   SAYAC
LOAD
;PORTTAN SIRA ILE GELEN VERILERI CARRY BITINE YERLEŞTİR
  RLF   REGL,F
  RLF   REGH,F
  DECFS   SAYAC,F
  GOTO   LOAD

görüldüğü üzre once regl hemen ardından regh yı kaydırdım.kaydırmaya başlamadan once carry de porttan gelen sıradakı veri bitim var.ilk kaydırmada bu bit regl nın 0. bitine yerleşti.ve regl nın 8. biti carry e aktarıldı.Akabinden regh yi kaydırdım ve regl den taşan carry deki bit regh nin. 0. bitine girdi.Böylece ne oluyor regl den taşanlar reg h ye girerek devam ediyor.Sanırım sormak istediğin nokta burasıydı.Umarım anlatabilmişimdir.
Kolay gelsin.
Başlık: carry biti
Gönderen: bigbey - 29 Eylül 2007, 15:12:53
1. registerden gelen carry registeri içeriği 2. registeri kaydırdığında aynen 2. registerin kayan yönünde 2. registere ilave olur
Başlık: carry biti
Gönderen: CLR - 29 Eylül 2007, 15:26:41
@F493

1)C içinde 2 register kullanıp  kaydırma operatörleri olan >> veya << kullanırsan derleyici her kaydırma operatörlerini gördüğü zaman Carri flag'i siler. Dolayısla bit aktarımı olmaz. Sadece kaydırma kısmını asm ile yaparsan carry silinmez ve bit aktarımı olur.

2)Veya bir tane C içinde 16 bitlik register tanımlarsan bunun üzerinde shift yaparsan carry'yi derleyici silmez. İstediğin gibi shift yapabilirsin.

Kolay gelsin
Başlık: carry biti
Gönderen: bigbey - 29 Eylül 2007, 15:38:42
Şekilde izah edildiği gibi 1. durumda registerler işlem yapılmamış hali.
2. durumda reg1 sağa kaydırılıyor. ve carry içeriğindeki bit register1 'e 7. bite geliyor. register1 deki sıfırıncı bit ise carry nin içine geçiyor.
3. aşamada register 2 sağa kaydırılıyor. böylece carry içeriği regisre2 nin 7. biti olarak geçiş yapıyor. register2 nin sıfırıncı biti de carry nin içeriği olarak yerini alıyor.
(http://img170.imageshack.us/img170/4060/adszyy4.th.jpg) (http://img170.imageshack.us/my.php?image=adszyy4.jpg)
Başlık: carry biti
Gönderen: F493 - 01 Ekim 2007, 09:27:14
Arkadaşlar yardımınız sayesinde hallettim ,ellerinize saglık.

Aslında benim amacım 64 bitlik bir register'a bitleri yerleştirmekti , amacım bu örnekle mantıgını kavramaktı ve testimiz başarılı oldu , sanırım bu şekilde 64 bitide alıp registerlera yerleştirebilirim.
Başlık: 64bit için
Gönderen: F493 - 01 Ekim 2007, 11:36:42
arkaşlar 64 bit için yaptım ,simülasyonda mevcut isteyen arkadaşlara kaynak olabilir.

http://rapidshare.com/files/59467805/carrylikaydirma.rar.htmll