Bu kodların XC8 Karşılığı nedir ?

Başlatan baran123, 18 Ocak 2015, 19:06:23

baran123

DS18B20 yi CCS C'den XC8 e çevirmeye çalışıyorum fakat bilmediğim bir kaç satır var.

output_float(ONE_WIRE_PIN);//1
output_bit(ONE_WIRE_PIN, shift_right(&data,1,0));//2
temp3 = make16(temp2, temp1);//3


static int1 ds_flag=1;             //
int8 busy=0, temp1, temp2;// değişkenlerde değiştirilmeli mi ?
signed int16 temp3;//
static float result;//



Kütüphane bu
#define ONE_WIRE_PIN PIN_C0

void onewire_reset()
{
   output_low(ONE_WIRE_PIN);
   delay_us(500); // örneğin bu satır ?
   output_float(ONE_WIRE_PIN);
   delay_us(500);
   output_float(ONE_WIRE_PIN);
}

void onewire_write(int data)
{
   int count;
   for (count=0; count<8; ++count)
   {
      output_low(ONE_WIRE_PIN);
      delay_us(2);
      output_bit(ONE_WIRE_PIN, shift_right(&data,1,0));
      delay_us(60);
      output_float(ONE_WIRE_PIN);
      delay_us(2);
   }
}

int onewire_read()
{
   int count, data;
   for (count=0; count<8; ++count)
   {
      output_low(ONE_WIRE_PIN);
      delay_us(2);
      output_float(ONE_WIRE_PIN);
      delay_us(8);
      shift_right(&data,1,input(ONE_WIRE_PIN));
      delay_us(120);
   }
   return(data);
}

float ds1820_read()
{
   static int1 ds_flag=1;
   int8 busy=0, temp1, temp2;
   signed int16 temp3;
   static float result;

   if(ds_flag==1)
   {
      onewire_reset();
      onewire_write(0xCC);
      onewire_write(0x44);
      ds_flag=0;
   }

   if(ds_flag==0)
   {
      busy = onewire_read();
      if(busy==0)return result;
      else ds_flag=1;
   }
   onewire_reset();
   onewire_write(0xCC);
   onewire_write(0xBE);
   temp1 = onewire_read();
   temp2 = onewire_read();
   temp3 = make16(temp2, temp1);

   result = (float) temp3 / 16.0;

   return(result);
}

MrDarK

output_float ; Yazdıklarından anladığım pini floating input yapmak gibi birşey olsa gerek,
link : http://www.ccsinfo.com/forum/viewtopic.php?p=47681

output_bit ; Sadece tek biti aktif eder, DS18B20 tek hattan haberleştiği için onun bulunduğu pine bilgiler bit bit gönderilir.

make16 ise ; Adı üstünde girilen 2 adet 8 biti birleştirerek tek bir 16 bit data yapıyor.

Değişkenlerde ise ;
staticler ortak , signed dediği aslında char x demek. Eğer işaretsiz isteseydin unsigned char yazman yeterliydi.
Picproje Eğitim Gönüllüleri ~ MrDarK

Gökhan BEKEN

#2
ccs c deki hazır fonksiyonların xc8'de bir karşılığı yok.
xc8 için şu örneği inceleyebilirsin: http://gokhanbeken.com/dosyalar/16f877A_ve_3adet_DS18B20.rar

not: projeyi baştan yazmadım, bi arkadaş tek sensörlüsünü yapmış, 3 lüsünü yapamamıştı, bende 3lü ye çevirdim: http://gokhanbeken.com/ds1302-projesi-xc8-ve-c18-derleyicileri-icin-tek-program
Özel mesaj okumuyorum, lütfen göndermeyin.