Haberler:

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

Ana Menü

shift_right kullanımı

Başlatan conavar, 02 Mayıs 2007, 00:14:05

conavar

arkaşlar bi devre için uğraşıyorum basit bir display tarama olacak...
4094 kullıyorum shift register olarak...
bu 4094`ün bana gıcığı var zaten :D o ayrı bi olayda
compiler içinde :
for(i=0;i<8;++i)

   output_bit(PIN_A0,shift_right(&data,1,0));

boyle bir örnek verilmiş...benim de ingilizcem Türkçem kadar kötü  :oops:
anlayamadım buradaki data ve diğer 1 ile 0 olayları nedir??
data bizim kaydırmak istediğimiz değişken zannediyorum...
4094 e şu şekilde data gönderiyorum:
  int i;
   clrCLK;
   delay_us(20);
   for (i=8;i>0;i--)
   {
      output_bit(PIN_A1,shift_right(&data,1,0));
      delay_us(20);
      setCLK;
      delay_us(20);
      clrCLK;
   }


ve başlangıçtaki data değerim "0" olarak atalı...
data=0; yani

yapmak istediğim su birinci displayi süreceğim "0" lazım ve bu sıfır kayacak (inşallah allahım yarabbim :) ) 11111111 başlayarak 01111111 10111111 diye sıfırı kaydırmak istiyorum kafam karıştı :) yardım edebilir misiniz ?
.::BiLgi Paylaştıkça Çoğalır::.[/url]

MURSEL

yardımcı olabilirmiyim bilmiyorum ama data ilk başta 0 olucak sen bu 0 ı sürekli saga kaydıracaksın sanırım bir örnek yapayım
int data,b;
data=128;   //ilk başta deger 10000000 olsun
while(1)
{
delay_ms(süre);  
b=~data;       // data degişkenin değilini b degişkenine yükle=01111111
data=data>>1; ve data daki degeri bir saga kaydır =01000000
}

ve sürekli bu döngünün içinde data yı 1 kaydırıb degeri değilliyoruz bu konularda bende yeniyim yardımcı olurmusunuz

Ziya

shift_right(&data,1,0)

data>>=1 ile aynıdır.

argumanlardan 1 data adresinden başlayarak 1 bayt sağa kaydır ve en yüksek değerli bite de 0 ata demektir.

Eğer değişkenin 16 bitlik olsaydı 1 yerine 2 yazman, 32 bitlik olsaydı 1 yerine 4 yazman, değişkenin 64 bit olursa 1 yerine 8 yazman gerekirdi.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

XX_CİHAN_XX

shift_right(&data,1,0)

asm olarak değerlendirirsek
  bcf   STATUS,C
   rrf   data,f

Sanırım bu kodun açılımı böyle(epeydir ccs kullanmıyorum hatalıysam düzeltin)
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Ziya

shift_right(&data,1,1)

asm olarak değerlendirirsek
  bsf   STATUS,C
   rrf   data,f

Bu da böyle
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

conavar

sağol arkadaşlar hallettim :)
gece baya düşündüm sabah kalktığımda :P tamam dedim ve artık istediğimi yapabiliyorum :)
.::BiLgi Paylaştıkça Çoğalır::.[/url]

MURSEL

ziya hocam teşekkürler  bilgilendirdigin için
argumanlardan 1 data adresinden başlayarak 1 bayt sağa kaydır ve en yüksek değerli bite de 0 ata demektir demişsiniz 1 bayt mı saga kaydırıyor  bit mi

Ziya

bit tabi ki yanlış yazmışım.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

MURSEL

peki hocam her saga kaydıgında  sol taraftan  0 gelicek  dolayısyla 0  kayıyor ama istenilen sonuç oluyormu 1 durum 01111111  2.durum 00111111 3  3. durum 00011111 gibi  ama biz sadece 0 degerini kaydırcaz  1.durum 01111111 2.durum10111111  gibi kusura bakma bu komudun ilk defa sizden ögrenicem    böyle bi program yazdıgımdan değil sace ögrenmek için comutun böyle özel bi işleyişi varmı diye

Ziya

shift_right(&data,1,1)  bunu kullanacaksınız.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

conavar

Alıntı yapılan: "conavar"sağol arkadaşlar hallettim :)
gece baya düşündüm sabah kalktığımda :P tamam dedim ve artık istediğimi yapabiliyorum :)
dedim ama
o kadar cok deneme yaptım ki...
kafam artık karıştı ne yaptığımı da unuttum :D
bu su gibi akıp gidiyor...
tekrar ilk değeri yüklüyorum değişkene ama kendini tekrarlamıyor...
ya bi kayduramadım sunu tam istediğim gibi :D

şimdi 1111 1111 değerinden başlayan yani 0xFF değerini kaydırıcam.
0x7F ,0xBF ,0xDF ,0xEF ,0xF7 ,0xFB ,0xFD , 0xFE ve 0xFF yani bunu yapmasını istiyorum ok...
peki hatam interrapt zamanı gelince data değişkenine bunları yüklemem mi?
yarım saniye aralıklarla data değişkenine sırayla bı değerleri yüklüyorum ama bu sefer kayma değil de sanki zoraki bi kaydırma oluyo :D
data değişkenine 128 atadığım zaman aşağıdaki komutla bunu sıra sıra kaydırmam gerekmez mi ?? neden kaymıyo :D
en sonunda sokecem 4094 ü :) 877 kullanacam 40 pin yayla gibi :D
                           for(i=0; i<8; ++i)
                           {
                              output_bit(PIN_A1,shift_right(&data,1,0));
.::BiLgi Paylaştıkça Çoğalır::.[/url]

Ziya

#bit cikis=GETENV("BIT:pin_a0") // veya 16F için cikis=0x05.0
...
int gonder_kaydir(int data)
{
   int veri, i;
#bit gon=veri.0
   veri=data;

   for (i=8;i>0;i--)
   {
      if(gon) cikis=1;
      else cikis=0;
      delay_us(20);
      setCLK;
      delay_us(20);
      clrCLK;
   } 
 rotate_right(&data,1);
 return data
}      

main()
{
 int i,data=0x7F;

 for(i=0; i<8;i++)
  {
   data=gonder_kaydir(data);
   ....
  }
}
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

MURSEL

bilgendirdiginiz için teşekkürler

conavar

sabahın 5`inden beri sürünüyorum...
kafama bu takılıyo :D oturuyorum başına :D gene olmuyo yani oluyo ama eksik oluyor...yapacağım şey basit işte kırmızı ok yönünde sürekli olarak ledleri ardışıl yakmak istiyorum tabiki hızını da kontrol edebilme şartıyla :)

.::BiLgi Paylaştıkça Çoğalır::.[/url]

XX_CİHAN_XX

@conavar,
Bu şema ile değil sabah kadar 1 ayda uğraşsan o devreyi çalıştıramazsın :)
sebep:
STR ucunu direk vcc ye çekmişsin.Bu şekilde çıkışta hiçbirşey göremezsin.
STR ucunu clock ile birleştirmen yada clock muş gibi ayrı değerlendirmen lazım.Entegrenin iç yapısını incelersen demek istediğimi anlarsın.
Kolay gelsin.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.