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);
}
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 (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.
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 (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 (http://gokhanbeken.com/ds1302-projesi-xc8-ve-c18-derleyicileri-icin-tek-program)