hi tech derleme hatası

Başlatan malpaslan1979, 29 Haziran 2010, 00:58:34

malpaslan1979

Merhaba.

Bilim teknik dergisine ait bir sitede bir arkadaşımla DTMF kodlar ile ilgili bir proje bulduk. Bu proje Hitech C dilinde yazılmış. Bu program üzerinde bir iki değişiklik yaptık örneğin şifre ve bekleme süresi üzerinde. Programı internetten indirdim ve Mplab içerisine ilgili bağlantıyı da yaptım yalnız derleme yaparken hata veriyor. Siz ustalarımdan ricam görebildiğiniz bir hata var mı? Yaptığımız değişiklik derleme problemlerine sebep olmuş olabilir mi? Birde tabi eğer mümkünse derlenmiş halini bir yere upload edebilir misiniz? Saygılarımla.

// Telefonla uzaktan cihaz kontrolu projesine ait PIC16F84A programi
// CM8870'in Q1-Q4 cikislari PIC16F84A'nin RB0-RB3 pinlerine baglidir.
// StD ucu RB4'e baglidir. Hat acma rolesi RA1'e baglidir.
// Sifre onay LED'i RA2'ye baglidir.
// Zil calma sayisi icin pals devresi RA1'e baglidir.
// Kontrol edilecek cihazlar sirasiyla RB5,RB6,RB7'ye baglidir.

#include <pic.h>
#include <delay.c>

#define StD RB4
#define HAT_ROLE RA1
#define LED RA2
#define PALS RA0

// 4MHz osilator
__CONFIG(XT&WDTDIS&PWRTEN);

unsigned char kontrol=0;
unsigned int CX;

//----------------------------------------------------------
// Timer alt programi
// 15 saniye suresince tusa basilmadiysa hatti kapatmak icin
//----------------------------------------------------------
void interrupt kesme(void){

CX++;
if(CX>15000)kontrol=1;
   
T0IF=0; // bayragi temizle
TMR0=131;
}
//----------------------------------------------------------


//----------------------------------------------------------
// ANA PROGRAM
//----------------------------------------------------------
main(void){

unsigned char i,komut,sifre[5],sayac;

//----------------------------------------------------------
// Port konfigurasyonu
//----------------------------------------------------------
TRISB=0x1F; // PORTB'nin RB5,6,7 pinleri cikis,digerleri giris 
TRISA=0x01; // RA0 giris digerleri cikis
//----------------------------------------------------------

PORTB=0; // cihazlar enerjisiz
PORTA=0; // hat kapali, LED sonuk

//-------------------------------------------------------------
//Timer islemleri (kesme suresi=1ms)
//-------------------------------------------------------------
T0CS=0; // Dahili clock
PSA=0; // Prescaler TMR0 icin ayarli
PS0=0; PS1=1; PS2=0; // Oran 1:8
ei(); // butun kesmeler etkin
T0IE=0; //Baslangicta timer pasif
T0IF=0; // bayrak temizle
//-------------------------------------------------------------

// resetten sonra 1 saniye bekle
for(i=0;i<4;i++)DelayMs(250);

basla:

sayac=0; CX=0;

for(;;){ // zil sayisi belirleme dongusu

while(PALS==1);

sayac++;

   if(sayac>250){ // Zil sayisi 10
      HAT_ROLE=1; // Hatti ac

      sifreoku:
     
      for(i=0;i<5;i++){ // sifreyi al

      //--------------------------------------
      kontrol=0;
      TMR0=131; // 
      T0IE=1; // TIMER ON

      //--------------------------------------

         while(StD==0){   // tusa basilmadi ise bekle
            if(kontrol==1){ // sure>15s ise hatti kapat
            HAT_ROLE=0; goto basla; // basa don
            }
            else {};
         }

      T0IE=0; CX=0; // Tusa basildi ise Timer'i durdur, CX'i sifirla
               // Boylece yeni bir 15s'lik ek sure kazanilmis olur
      sifre=PORTB&0x0F; // sifreyi oku

      while(StD==1); // tus basili ise bekle
      }
      //--------------------------------------
      // sifrenin son hanesi * olmalidir
     
      //--------Sifre konrol------------------
      if(sifre[0]==7 && sifre[1]==9 && sifre[2]==8 && sifre[3]==1 && sifre[4]==11){
      // 11 degeri tus takimindaki * tusuna karsilik gelir.

      LED=1; // sifre dogru ise LED'i yak
         
         for(;;){
            while(StD==0); // cihazlar icin komut bekle
                     
            komut=PORTB&0x0F;
   
            if(komut==1)RB5=1; // cihaz 1 ON
            if(komut==2)RB6=1;
            if(komut==3)RB7=1;
            if(komut==4)RB5=0; // cihaz 1 OFF
            if(komut==5)RB6=0;
            if(komut==6)RB7=0;
   
            if(komut==12){ // # tusuna basildi ise hatti kapat
               HAT_ROLE=0; LED=0; goto basla;
            // Cihazlarin ON/OFF durumlari degismeden kalir.
            }
         }           
            //--------------------------------------
      }
     
      else{
      goto sifreoku; //sifre yanlis ise tekrar sifre okumaya git
      }
   }

   else{  // sayac<250 ise
   while(PALS==0);
   }

} // for dongusu

}

fatihinanc

sifre=(PORTB & 0x0F); // sifreyi oku
satırında dizi değişkene bu şekilde atama yapmazsınız.
o an dizinin hangi indisine o atama yapılacak belirtmeniz gerekir.
örnek;

sifre[0]=(PORTB & 0x0F);
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)