sağa sola kaydırma işlemleri

Başlatan x-tol, 24 Ağustos 2007, 10:51:00

x-tol

merhaba
portb'ye yazdığım b'11001100' bit paternini 6 defa sola, 6 defada sağa kaydırmak istiyorum(rlf, rrf ile). 6 defa kaydırma ve diğer yöne geçmesi için diğer 5 durumdan farklı bir bitin oluşması gerekiyor b portunda. fakat portb içinde diğer 5 durumdan farklı bit bit oluşmuyor.

sola kaydırmada oluşan bitler:

1-1-0-0-1-1-0-0  -->1
0-1-1-0-0-1-1-0  -->2
0-0-1-1-0-0-1-1  -->3
1-0-0-1-1-0-0-1  -->4
1-1-0-0-1-1-0-0  -->5
0-1-1-0-0-1-1-0  -->6

sadece sola kaydırma yaptığımızda her bit en az iki sefer farklı konumda bulunmuş yani bu bitlere bakarak 6. seferde diğer yöne geçmeyi sağlayamıyorum. bitleri toplama, çıkarma yöntemlerini uygulamadan bu işin bir kısa yolu var mıdır gözümden kaçan?(bir karşılaştırma komutu var mı? 6. seferde oluşacak olan sayıyı önceden belirleyip komut yardımıyla portb'yi karşılaştırarakta olabilir).

aslan_korhan

PBP için şöyle birşey yapabilirsin :

Bilgi = Bilgi << 6


Yani bilgi değerini 6 defa sola kaydır...
Dünyada 10 çeşit insan vardır. Binary bilen ve bilmeyenler.

OG

x var byte
kayma var byte
yedek_bit var bit
sayi_1 var byte

sayi_1= PORTB ' PORTB nin değeri alındı.

kayma=....   ' Kaç adım kayacaksa kaymaya o değeri ver

' Sağa kayma
for x=1 to kayma
yedek_bit=sayi_1.0
sayi_1=sayi_1>>1  'Sağa kayma için
sayi_1.7=yedek_bit
next kayma

' Sola kayma
for x=1 to kayma
yedek_bit=sayi_1.7
sayi_1=sayi_1<<1  'Sola kayma için
sayi_1.0=yedek_bit
next kayma
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

XX_CİHAN_XX

Alıntı yapılan: "x-tol"merhaba
portb'ye yazdığım b'11001100' bit paternini 6 defa sola, 6 defada sağa kaydırmak istiyorum(rlf, rrf ile). 6 defa kaydırma ve diğer yöne geçmesi için diğer 5 durumdan farklı bir bitin oluşması gerekiyor b portunda. fakat portb içinde diğer 5 durumdan farklı bit bit oluşmuyor.

sola kaydırmada oluşan bitler:

1-1-0-0-1-1-0-0  -->1
0-1-1-0-0-1-1-0  -->2
0-0-1-1-0-0-1-1  -->3
1-0-0-1-1-0-0-1  -->4
1-1-0-0-1-1-0-0  -->5
0-1-1-0-0-1-1-0  -->6

sadece sola kaydırma yaptığımızda her bit en az iki sefer farklı konumda bulunmuş yani bu bitlere bakarak 6. seferde diğer yöne geçmeyi sağlayamıyorum. bitleri toplama, çıkarma yöntemlerini uygulamadan bu işin bir kısa yolu var mıdır gözümden kaçan?(bir karşılaştırma komutu var mı? 6. seferde oluşacak olan sayıyı önceden belirleyip komut yardımıyla portb'yi karşılaştırarakta olabilir).

Sola değil sağa kaydırma yapmışsın.Yanlış anlamadıysam 6 sefer sola sonra 6 sefer sağa kaydırmak istiyorsun.Ve 6 sefere ulaştığını bitlerdeki değişikliğe bakarak anlıyamadığını söylüyorsun.

Bu sorunu asm de basit bir sayaç ile çözsen çok mu zaman kaybı olur?
  movlw   .6
   movwf   sayac
   movlw   B'11001100'
   movwf   PORTB
   
   rlf          PORTB,F
   decfsz    sayac,f
   goto       $-2

   movlw   .6
   movwf   sayac

   rrf          PORTB,F
   decfsz    sayac,f
   goto       $-2

   ....


gibi birşey mi lazım
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.