Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

shift_left ccs ???

Başlatan Cetinal, 15 Ekim 2007, 00:27:34

Cetinal

bu shift_left nedir  komut olmasa gerek program yazarken yazdığımızda mavi rengini almıor derleyici içerisinde
nedir bu tam olarak ben bu komutu 74165.c içerisinde filan da gördüm nerden çağırıyor bu komutuı derleyici mantığı nedir

SpeedyX

sola kaydırma yapıyor (bkz. Help)

Cetinal

peki bu komut yerine standart olarak nasıl bi komut veya komutlar kullanabiliriz ??

kurumahmut

Temel bir C kitabına bakmalısın...


value = value << 1;  // Bir bit sola kaydır...

value = value << 4;  // Dört bit sola kaydır...

value = value >> 4;  // Dört bit sağa kaydır...
.
...
....

Cetinal

aslında bunu demek istemedim bit kaydırma işlemini biliorum

ozmn bu komutun yerine standar c de yazdığımız programlar için yeni bir alt program yazmak lazım baştan neyse vakit bulduğumda bi yzmaya çalışalım

zaten tam olarak help dosyasını inceleyip karşılığını okumadım orda da anlatıo sanırım bişeyler

XX_CİHAN_XX

Alıntı yapılan: "RoMeO123"bu shift_left nedir  komut olmasa gerek program yazarken yazdığımızda mavi rengini almıor derleyici içerisinde
nedir bu tam olarak ben bu komutu 74165.c içerisinde filan da gördüm nerden çağırıyor bu komutuı derleyici mantığı nedir
Ben kullanımını - işlevini şu şekilde biliyorum.
shift_left (address, bytes, value); 
adres yerine sola kaydırılacak olan regısterın ram bellek adresı yazılır.(örneğin 0x20)
byte yerıne kac kez kaydırılacagı yazılır.(örneğin 2)
value yazan yere kaydırılmadan önceki cary de olması istenilen durum yazılır(1 yada 0)

shift_left (0x20, 5, 0);

0x20 deki registeri 5 kez sola kaydırdık ve kaydırmadan önce carry bitini clear yaptık.

Uzun zamandır ccs kullanmıyorum yanlışım varsa 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

Alıntı yapılan: "XX_CİHAN_XX"
shift_left (address, bytes, value); 
adres yerine sola kaydırılacak olan regısterın ram bellek adresı yazılır.(örneğin 0x20)
byte yerıne kac kez kaydırılacagı yazılır.(örneğin 2)
value yazan yere kaydırılmadan önceki cary de olması istenilen durum yazılır(1 yada 0)

shift_left (0x20, 5, 0);

0x20 deki registeri 5 kez sola kaydırdık ve kaydırmadan önce carry bitini clear yaptık.

Uzun zamandır ccs kullanmıyorum yanlışım varsa düzeltin....
byte yerine kaç kez kaydıralacağı yazılmaz. Zaten komutun kendisi sadece bir kez sola kaydırmak içindir. Oradaki bytes adresten sonra kaç adresin daha kaydırılacağını belirtir. Örneğin byte aa[10] olsun. aa[9]=0b00000001 rakamı atansın. shift_left(&aa[0],10,0) komutu 79 kere çağırılırsa aa[0] içeriği 0b10000000, aa nın diğer elemanları da hep sıfır olur (shift_left parametrelerinde üçüncü girilen parametre ile doldurulur yani biz 0 girdiğimiz için aa'nın diğer elemanları 0 olur).
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

:oops:  Ccs yi öğrendiğimin ertesi günü bu komut üzerinde biraz çalışmıştım ve epeydirde kullanmadığım için aklımda yanlış kalmış bu sayede tekrar hatırlamış oldum...
Herkese 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.

oyhan

<<, is equivalent to multiplying by two. So binary 001, becomes '010'. 
If you want to shift a value in, then look at the 'shift left' command. This allows a value to be shifted in to fill the bottom bit. So: 

Code: 

int16 value=0b0000000000000001; 

shift_left(&value,2,0); 

//This gives 0b0000000000000010; 

shift_left(&value,2,1); 

//This gives 0b0000000000000101; 
 

So with this command, you can elect to shift in a zero or a one as required. 
Look also at: 
Code: 

int16 value=0b1000000000000000; 

rotate_left(&value,2); 

//This gives 0b0000000000000001; 
 

This form, rotates, rather than shifting the word, in the example, taking the top bit, and rotating it back to the bottom bit.

Örnek CCS formundan alıntıdır...
Bu şekilde bir örnek kullanım için bende 16 bitlik bir değişken tanımladım ve aşağıdaki gibi bir kod yazdım. Burda sanırım aşağıdaki kullanım için bir sorun olmasa gerek. Kullandım sorun yaşamadım iş görüyor..:D
Faydalı olması dileği ile...

int16 Data=0;
#int_EXT
EXT_isr()
{
 shift_left(&Data,2,(!input(PIN_C1)) ); //pin C1 low ise 2 bytelık datayı bir sola kaydır ve 0 ıncı biti   0 yap
 shift_left(&Data,2,(input(PIN_C1))  ); //pin C1 high ise 2 bytelık datayı bir sola kaydır ve 0 ıncı biti   1 yap
 Delay_Us(5); 
 Islem=1;
}
BİRLİKTEN KUVVET DOĞAR: