seri iletişim protokolleri

Başlatan uguryendi, 31 Ağustos 2007, 22:15:36

uguryendi

picten pice  int32 formatında bir değişken içeriği göndermem gerekiyor.

sitede manchester code gibi birkaç terim duydum ancak yeterli açıklamayı bulamadım bana yardımcı olursanız sevinirim

Ziya

Alıntı yapılan: "uguryendi"picten pice  int32 formatında bir değişken içeriği göndermem gerekiyor.

sitede manchester code gibi birkaç terim duydum ancak yeterli açıklamayı bulamadım bana yardımcı olursanız sevinirim

union {int32 senin_degiskenin;
           int benimki[4];
      }

....
       putc(benimki[0]);
       putc(benimki[1]);
       putc(benimki[2]);
       putc(benimki[3]);

veya 
       putc(*(&senin_degiskenin));
       putc(*(&senin_degiskenin+1));
       putc(*(&senin_degiskenin+2));
       putc(*(&senin_degiskenin+3));

      
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

uguryendi

peki böyle bi yapıda kendi değişkenimi nasıl 4 e bölücem ve karşıda hangi sırada oldklarını nerden bilcem sıralı geliyorlar zaten diceksinz ya 1.yi alamzsamda ve 2.den başlarsa :S böyle bir durumun çöüzmü ne olabilr acaba

Ziya

her iki picteki yazılımı siz yazmıyor musunuz? hangi sırada gönderiyorsanız karşı tarafta da aynı sırada alacaksınız.
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

fatihvelid

Alıntı Yap
peki böyle bi yapıda kendi değişkenimi nasıl 4 e bölücem ve karşıda hangi sırada oldklarını nerden bilcem sıralı geliyorlar zaten diceksinz ya 1.yi alamzsamda ve 2.den başlarsa :S böyle bir durumun çöüzmü ne olabilr acaba

4 byte'lık int32 değişkenin her bir byte'ına şu şekilde erişebilirsin.

{
int32 MyVar;
unsigned char BirinciByte,IkinciByteUcuncuByte,DorduncuByte;
BirinciByte =  ((unsigned char *)&MyVar)[0];
IkinciByte = ((unsigned char *)&MyVar)[1];
UcuncuByte = ((unsigned char *)&MyVar)[2];
DorduncuByte = ((unsigned char *)&MyVar)[3];
}


Kolay gelsin
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...

uguryendi

tşk ederim ancak bide nasıl birleştircem tekrak (:  yüz verdinz astarını istedim bende kusura bakmayın (:

ferdem

Eğer verileri sırayla gönderirsen sırayla alırsın:) Ama tabi ki kendini doğrulayan bir sistem kuracaksın. Göndereceğin veriden önce örneğin putc('a') yazıp sonra putc(ilkparca) diyeceksin. Alıcı tarafa a yı gördüysen ilk parcayı al diyeceksin. 2.parcayı putc('b') den sonra... veriyi gönderdikten sonra bir de toplam verideki 0 ları veya 1 leri saydırıp karşıda oluşan veriyle kontrol edersin(parity kontrol gibi).

Veriyi parçalama işine gelince bitwise operatörlerle çalışman gerekecek. Ben internette yapılmış örnekler görmüştüm. Örnek: Verimiz 16 bitlik olsun:
0b0101011101011011 bu veriyi 1 sayısıyla 'and' lersen ki şöyle:
0b0101011101011011 & 1
verimizin ilk hanesinin değerini alırsın. Bu da 1 dir, (1 & 1=1)
Sonra bu 1 sayımızı 2 ile çarpa çarpa ve verimizle and leye and leye verimizin bütün bitlerini öğrenebiliriz. Öğrendiğimiz bitlerle 8 bitlik farklı  sayıları(parçaları) oluşturacağız. Veya sayımızı 2 ile çarpmaktansa verimizi shift right yapabiliriz. Bu terimleri araştır. Güzel bilgiler edinmiş olacaksın, bu basit ve çok faydalı bir yazılım çalışması olur. Sonra da kodunu burda bizimle paylaşırsın. Ben de yazacağım, ben de burda paylaşırım. Kolay gelsin.

uguryendi

verici
Alıntı Yap#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

int16 i;
int part1,part2;
void main()
{
delay_ms(1000);
i=0;
for(i=0;i<0xFFFF;i+=10)
{    
  part1 = make8(i,0);
  part2 = make8(i,1);
 
  putc('a');
  delay_ms (10);
  putc(part1);
   delay_ms (10);
    putc(part2);
     delay_ms (100);
}

}

alıcı
Alıntı Yap#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#include <lcd.c>

int16 i;
int part1,part2;

void main()
{
lcd_init();
while(1)
{
while(kbhit())
{
if (getc()=='a')
part1=getc();
delay_ms(1);
part2=getc();

i = make16(part2,part1);
}
printf(lcd_putc,"\f%Lu",i);
delay_ms (100);
}
}

topic i hortlatmak gibi olcak ama projenin diğer kısımlarıyla ilgilenirken anca bu denemeleri yapabildim