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. Web sayfası sorunları için destek@ercankoclar.com adresine e-posta atabilirsiniz.

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

 


Hiçbir şahsi sosyal medya hesabım yoktur
Yanlızca tanıtım amaçlı sosyal hesaplar kullanılmaktadır
İletişim için sadece soru-cevap forumunu kullanınız