Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: Cetinal - 15 Ekim 2007, 00:27:34

Başlık: shift_left ccs ???
Gönderen: Cetinal - 15 Ekim 2007, 00:27:34
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
Başlık: shift_left ccs ???
Gönderen: SpeedyX - 15 Ekim 2007, 09:25:33
sola kaydırma yapıyor (bkz. Help)
Başlık: shift_left ccs ???
Gönderen: Cetinal - 15 Ekim 2007, 22:47:53
peki bu komut yerine standart olarak nasıl bi komut veya komutlar kullanabiliriz ??
Başlık: shift_left ccs ???
Gönderen: kurumahmut - 16 Ekim 2007, 00:08:54
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...
.
...
....
Başlık: shift_left ccs ???
Gönderen: Cetinal - 16 Ekim 2007, 00:13:37
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
Başlık: Re: shift_left ccs ???
Gönderen: XX_CİHAN_XX - 16 Ekim 2007, 14:04:38
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....
Başlık: Re: shift_left ccs ???
Gönderen: Ziya - 16 Ekim 2007, 15:39:31
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).
Başlık: shift_left ccs ???
Gönderen: XX_CİHAN_XX - 16 Ekim 2007, 15:48:51
: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.
Başlık: shift_left ccs ???
Gönderen: oyhan - 01 Şubat 2008, 02:43:06

<<, 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;
}