integerin bitlerine erişim

Başlatan dendimon, 24 Temmuz 2015, 15:51:25

dendimon

Merhaba css c' nin syntaxına biraz yabancıyım. Yapmaya çalıştığım şey bir tane 32 bitlik değişken tanımlayıp onun bitlerine fiziksel inputlarımdan gelen  değerleri yerleştirmek.

'' unsigned int32 scanner; '' diye bir değişken tanımladım. Fiziksel inputları da;

#define input1   pin_e5
#define input2   pin_d4
#define input3   pin_e0    şeklinde 32 tane tanımladım. Plc' de Structed Text dilinde yazarken şu tarz bir kod işimi görüyordu.

scanner.0 := input1; yada move(input1, scanner.0); 

ben bu scanner değişkeninin istediğim bitine nasıl ulaşıp ona başka bir bool değerini atayabilirim ?




RaMu

#1
CcsC help kısmına (sağ üstteki soru işaretinden contents)
bit yazıp, bit_test, bit_set, bit_clear a bakabilirsiniz.

#define input1   pin_e5
şeklinde tanımlar çok bir şey ifade etmez,
bu tanımlar compiler directive, derleyici bildirimi oluyor, çalışma esnasında bir işlevleri yoktur,
bunlar 8bitlik bir pic için mod8 yapıldığında pinin numarasını verecek şekilde ayarlanmıştır,
misal pin_b0, 0x40 gibi tanımlanmıştır, 40mod8 = 0 olur 0 nolu pin demektir.

https://www.ccsinfo.com/faq.php?page=map_io_to_variable
Burada direk erişim için struct tanımlama var,
bu işleri dahada kolaylaştırabilir.

scanner.0 := input1;

gibi bir şey yapabilmek için
scanner ın struct olarak tanımlanıp her bitine erişim sağlanması gerekiyor.
Struct tan sonra
scanner.0 = input(pin_e5);

veya #define input_1  pin_e5 tanımlaması yapıldıysa;
scanner.0 = input(input_1);

yazılabilir.

input(pin_x);
komutu pin_x in durumunu okur,
pinin durumu high ise 1 döndürür,
pinin durumu low  ise 0 döndürür.




mesaj birleştirme:: 24 Temmuz 2015, 16:22:59

Structure ile uğraşmak istemiyorum diyorsan

      if (bit_test(scanner,0) ) 
        {
          output_high(pin_1); 
         }
      else 
      {
      output_low(pin_1);
       }
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

dendimon


mehmet

/* Bit Operation macros */
#define sbi(b,n) ((b) |=   (1<<(n)))        /* Set bit number n in byte b   */
#define cbi(b,n) ((b) &= (~(1<<(n))))       /* Clear bit number n in byte b */
#define rbi(b,n) ((b) &    (1<<(n)))        /* Read bit number n in byte b  */
#define fbi(b,n) ((b) ^=   (1<<(n)))        /* Flip bit number n in byte b  */
#define bit_is_set(b,n)   (b & (1<<n))      /* Test if bit number n in byte b is set   */
#define bit_is_clear(b,n) (!(b & (1<<n)))   /* Test if bit number n in byte b is clear */
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr