This post is also available in: English

forum-banner


Forum Navigation
Forum breadcrumbs - You are here:ForumBilim: YazılımMikroCUART Pc Haberleşme
Konu ve mesaj oluşturabilmek için giriş yapmanız gerekmektedir.

UART Pc Haberleşme

Konu kapanmıştır.

Merhaba

  • İlk olarak && çift olanlar if gibi koşullarda kullanılırlar . Örneğim İf(a==5 || a==3) gibi ancak & şeklinde tek olanlar bit düzeyinde işlem operatörleridir.
  • & (ve) operatörünü ele alacak olursak
    • 0 & 0 =0
    • 0 & 1 =0
    • 1 & 1  = 1 Şeklindedir.
  •  | (veya) operatörünü ele alırsak
    • 0|0=0
    • 0|1=1
    • 1|1=1 şeklindedir
  • Daha bir çok bit düzeyi işlem operatörü vardır. Bunlar veri yazdırma gönderme için işlemlerde sıkça kullanılır bende bunları tercih ederim.
  • Örnek olarak bir veriyi seri olarak göndereceksin veri 01001 şeklinde
    • Veriyi göndermek için hangi bit 0 hangi bit 1 bilmelisin buna göre
    • if( (veri & 0001)==0001) ise o halde 1. bit 1 dir diyerek porttan 1 yolluyorsun değilse sıfır yolluyorsun özellikle & (ve) yi bunun için çokça kullaınırım. Yani ;
      • veri = 01001 di bizim karşılatırdığımız değer ise 0001 o halde ve operatörüne göre ilk üç bit mutlaka sıfırdır son değer 1 ise 1 dir değil ise sıfırıdır. Çünkü ve nin koşulu sadece 1&1=1 di bu şekilde bitin 1 yada 0 olduğunu anlayabiliyoruz
    • Diğer yandan bit kaydıma operatörleri olan <<  >> işaretleri vardır. Yukarıda verinin 1 biti yolladık o halde sıradaki veriyi test edeceğiz
      • verimi 01001 di "veri=veri>>1" dediğimizde veriyi 1 bit sağa kaydır demektir. Verim 00100 oldu .
  • Bu kısa özetten sonra ( eğer tüm operatörleri merak ediyorsan ayrıntılı anlatabilirim.) sorularına gelelim
    • &PORTB bunun anlamı veriyi portb ile ve le yani gelen veri 0011 ise portb her durumda 0011 olacaktır çünkü portb 1111 de olsa ve operatörü gereği sadece 1 & 1 = 1 dir diğer tüm olasılıklar sıfırdır.
    • CMCON |=0X07  burada kompartörleri kapatmış  |= demek ise şunun gibi CMCON registerinin default değerlerini koruyarak benim belirlediğim 0x07 yi birleştir ve yeniden CMCON registerine ata . Yani " |" nin kurali 1|0=1 dir sadece 0|0=0 dır. O halde mevcut değeri koruyup kendi verimizi mevcut veri ile birleştirirken bunu kullanırız.
    • |= işaretine gelince   veri=veri|10 yerine   veri|=10 aynı şeydir sadece yazım şekli daha basit olduğundan kullanılır. Bu tüm bit düzeyindeki operatörlerde kullanılabilir.
  • Daha anlamadığın aklına takılan soruları sorabilirsin bit düzeyinde işlem önemli bir konudur ve bir çok noktada kullanılması gerekir.

İyi Çalışmalar

 

Konu kapanmıştır.

Merhabalar

  • İlk olarak bir düzeltme yapayım
    • &PORTB konusunu yanlış değerlendirmişim bu kullanımın bit düzeyinde işlem ile ilgisi yok bu işaretçiler(pointer) konusu ile ilgili yani bunu PORTB nin adresini almak için kullanıyor. Öncelikle bunu düzeltmiş olayım
  • Senin yapmak istediğin işlemin doğrusu "PORTB&=0x07" şeklindedir. Bit düzeyinde işlem bu şekilde yapılıyor.
  • Mantığını doğru kavramışsın sadece yazım şekli "PORTB&=0x07"  gibi daha önce ki gibi değil.( benim yanlış değerlendirmem sonucu)
  • Nerede kullanılacağına gelince
 // veri gönderme bölümü
  for(i=0;i<8;i++)
    {
      if((veri&0b10000000)==0b10000000)//gönderilecek bit 1 ise
        {
           //mutlaka en başta clock sıfıra çekilmelidir
           I2C_SCL=0;//clock sıfıra çekildi
           I2C_ILETISIM_HIZI;
           I2C_SDA=1;//veri yüklendi
           I2C_ILETISIM_HIZI;
           I2C_SCL=1;//clock bir'e çekilerek veri gönderildi
           I2C_ILETISIM_HIZI;
           I2C_SCL=0;//clock sıfıra çekildi
           I2C_ILETISIM_HIZI;
        }
      else// gönderilecel bit 0 ise
        {
           //mutlaka en başta clock sıfıra çekilmelidir
           I2C_SCL=0;//clock sıfıra çekildi
           I2C_ILETISIM_HIZI;
           I2C_SDA=0;//veri yüklendi
           I2C_ILETISIM_HIZI;
           I2C_SCL=1;//clock bir'e çekilerek veri gönderildi
           I2C_ILETISIM_HIZI;
           I2C_SCL=0;//clock sıfıra çekildi
           I2C_ILETISIM_HIZI;
        }

      veri=(veri<<1);//gönderilecek veri bir bit sola kaydırıldı
    }
  • Yukarıdaki kod kendi yazdığım I2C Kütüphanesine ait. Veri gönderme sistemi
  • "if((veri&0b10000000)==0b10000000)//gönderilecek bit 1 ise" bölümünde "ve(&)" bit düzeyinde operatörünü kullanmışım bu şekilde veri biti 1 mi yoksa 0 mı bunu anlıyorum
  • "veri=(veri<<1);//gönderilecek veri bir bit sola kaydırıldı" bu bölümde de veriyi gönderdikten sonra 1 bit sola kaydırıp sıradaki bitin 1 yada 0 olup olmadığının denetlenmesini sağlamışım
  • Daha çok örnek için Özgür Yazlımlar bölümünden kendi yazdığım özgün kütüphaneleri indirip içeriklerini okuyabilirsin hepsi açık kaynak ve açıklamaları var anlamadığın yeri sorabilirsin.
  • "UART1_Write_CText("text");" fonksiyonu ile ilgili olarak sanırım bu standart MikroC kütüphanesinde yok belki bunu yazan kendine ait bir fonksiyon olarak yazmış ve kullanmıştır.

İyi Çalışmalar