compile sorunu PCLRT40A.OBJ error

Başlatan trigger, 14 Mayıs 2005, 15:51:53

trigger

Merhaba SpeedyX,
Öncelikle benimle bu kadar ilgilendiğin içi çok teşekkürler sana.Senden başka yardımcı olan olmadı bana.Sorunu en sonunda hallettim.Gereksiz bir şekilde kullandığım bazı döngü vs düzenledim.HI-TECH manual'ını okudum biraz(360 sayfa tamamı).Orada şeyden bahsetmiş.program galiba compile ederken çok büyük bloklarda sorun çıkarıyor.Ben bloğu biraz düzenledim ve sorun çözüldü.Ben de senin dediğin gibi pic hafızasının yetmeyeceğine şüpheyle bakıyordum.Ama ondan değilmiş.
Neyse bu programın ilk bölümü.Yarın DS18B20 kullanarak bunu devrede test edeceğim.İnşallah sağlıklı bir ölçüm yaparım da seni bir daha rahatsız etmem:)
Bir kere düzgün ölçüm yaptıktan sonra programa başka şeyler de ekleyeceğim.Araya bi de röle,ısıtıcı rezistans vs girecek.
Neyse şimdilik bu kadar...

trigger

SpeedyX sana birşeyler daha sormak istiyorum.
1)DS18B20nin kendi sitesinin örnek uygulamasında delay değerleri verilmiş.Burada 8051 cinsi(11.059MHz için) verilmiş değerler.Ben 4 MHz kristal kullanacağım.Örnekte mesela delay fonksiyonunu çağırmak 24 microsaniye diyor.Ben bunu 4MHz'e uygulamak için (11.059*24)/4 işlemini yaptım.Ve 66.3 microsaniye buldum.Ve örnekte her bi for döngüsü çevrimi için 16us gerekiyor diyor.Aynı şekilde ben bunu (11.059*16)/4=44 buldum.Okuma-yazma slotlarına göre bunları kullandım.Yaptığım doğru mu?
2)char olarak tanımlanmış bir değişken ve bunu mesela 0x01 ile AND'liyoruz.Sonra sağa kaydırıyoruz.Soldaki doldurulan yerlerin içi 0 mı oluyor yoksa 1 mi?
3)Son olarak da benim programa bakarsak(editledim önceki sayfadakini)
read_temp fonksiyonunun temperature değerini main fonksiyonuna döndürmesi için ne yapmam lazım?Çünkü temperature değerini yazdırmam lazım.temperature değişkenini hem main de hem de read_temp de tanımladım doğrusu nasıl olacak?
Kusura bakma çok soru sordum ama bu benim için çok acil ve önemli bir ödev.Şimdiden teşekkürler.

SpeedyX

1) Delayus(24); // 24uS gecikme yapar. osc tanımlamalarına göre içeride kendi ayarlar.

2) "0" oluyor

3) şöyle bir read_temp fonksiyonu, dediğini yapar.
signed int read_temp(void)
{
   char get[10];
   char temp,temp_msb,temp_lsb,temp_msb2,temp_lsb2;
   char temp2[4];
   int i,k,temp3;
   signed int temperature;
   
   ow_reset();
   write_byte(0xCC);   
   write_byte(0x44);   

   delay2(1);
   ow_reset();
   write_byte(0xCC);   
   write_byte(0xBE);    
   for(k=0;k<9;k++)
   {
      get[k]=read_byte();
   }

   temp_msb=get[1];   
   temp_lsb=get[0];   
   temp_msb2=temp_msb & 0x80;         
      for(i=1;i<5;i++)
      {
         temp_msb=temp_msb<<i;
         temp_lsb2=temp_lsb>>i;
      }
   temp=temp_msb+temp_lsb2;   
   for(i=0;i<4;i++)
   {
      temp2[i]=temp_lsb & 0x01;
      temp_lsb=temp_lsb>>1;

   }
   if(temp_msb2>=0x80)      
   {
      temp_msb=temp_msb & 0x70;   
      temp=temp_msb+temp_lsb2;
      temp=(~temp)+1;      
      temp3=(int)temp2[3]*(1/2)+(int)temp2[2]*(1/4)+(int)temp2[1]*(1/8)+(int)temp2[0]*(1/16);
      temperature=(-1)*temp3+(-1)*(int)temp;      
   }
   if(temp_msb2<=0x80)
   {
      temp3=(int)temp2[3]*(1/2)+(int)temp2[2]*(1/4)+(int)temp2[1]*(1/8)+(int)temp2[0]*(1/16);
      temperature=temp3+(int)temp;      
   }
   return(temperature);
}


Bana kalırsa bu bilgilere farklı kaynaklardan (kitap, prghelp) kolayca erişilebilir.