Picproje Elektronik Sitesi

DERLEYİCİLER => Hi-Tech => Konuyu başlatan: demyzombie - 09 Mayıs 2007, 01:32:07

Başlık: Hi Tech kod derlemede hata
Gönderen: demyzombie - 09 Mayıs 2007, 01:32:07
Hi Tech i yeni kullanmaya basladım cok fazlada bildigim söylenemez ama program hexe çevirebiliyorum. asıl sorun şu benim internetten bulduğum ve tekrar derlediğim kod u hex e çeviremiyorum devamlı hata veriyor. PIC C ile yazılmış kod. Yardımcı olabilecek arkadaslar var mı acaba??

KOD:
#pragma chip PIC16F84

/*
 SERIAL COMMUNICATION (RS232)
 ============================

 Using 9600 baud, one stop bit, no parity.
 Baudrate 9600 baud => 104.167 microsec. per bit
 TMR0 counts each 8th microsec. => 13.02 steps per bit

 ______       _____ _____ _____ _____ _____ _____ _____ _____ _____
       |_____|_____|_____|_____|_____|_____|_____|_____|_____|
        Start bit0  bit1  bit2  bit3  bit4  bit5  bit6  bit7  Stop

 NOTE: RS232 signal levels are different from the CMOS levels
 used by the PIC device. A level converter is required:

       Logic level     CMOS       RS232
       1 (default)     +Vcc       -2.8V to -15V
       0               0 V        +2.8V to +15V
*/

#define _4_MHz    /* 4 MHz system clock */
#define BPS9600   /* 9600 bits per sec */
//#define BPS4800   /* 4800 bits per sec */
//#define BPS2400   /* 2400 bits per sec */
//#define BPS1200   /* 1200 bits per sec */

// optional items
#define UseTMR0
#define USE_CONST

#pragma bit RS232_out @ PORTA.0
#pragma bit RS232_in  @ PORTB.0
#pragma bit LED_Green @ PORTA.1
#pragma bit Button0   @ PORTB.4
#pragma bit Button1   @ PORTB.5


//UltraSonic Transmitter
//======================
#pragma bit US_TX1 @ PORTA.3
#pragma bit US_TX2 @ PORTA.2

//UltraSonic Transmitter Enable
// - 0 to enable,
// - 1 to disable.
//=============================
#pragma bit US_Enable_N @ PORTB.2


//UltraSonic Receiver
// - 0 to not received
// - 1 to first pulse received
//=============================
#pragma bit Echo_Recvd @ PORTB.1


#ifdef _4_MHz

 #ifdef BPS9600
   #define   TimeStartbit    4    //9600
   #define   BitTimeIncr     13   //9600
 #endif

 #ifdef BPS4800
    #define   TimeStartbit    8  //4800
    #define   BitTimeIncr     26 //4800
 #endif

 #ifdef BPS2400
    #define   TimeStartbit    4  //2400
    #define   BitTimeIncr     13 //2400
 #endif

 #ifdef BPS1200
    #define   TimeStartbit    8  //1200
    #define   BitTimeIncr     26 //1200
 #endif

#endif

unsigned long DelayCount;
char bitCount, limit;
char serialData;
char command; //first 4 bits are state
             // state 0 - expected = 0xAA
             // state 1 - expected = 0x55
             // state 2 - command
             // state 3 - bitwise complement of command

             //MSB 4 bits are the actual command.

#ifdef _4_MHz
#ifdef UseTMR0
  #define delayStart   limit = TMR0;
  #define delayOneBit      \
    limit += BitTimeIncr;  \
    while (limit != TMR0) \
        ;
#else
  #define delayStart   /* empty */
 
  //9600
  //====
 #ifdef BPS9600
  #define delayOneBit  {      \
       char ti;               \
       ti = 30;               \
       do ; while( --ti > 0); \
       nop();                 \
    }  /* total: 5 + 30*3 - 1 + 1 + 9 \
          = 104 microsec. at 4 MHz */
  #endif

 #ifdef BPS4800
  #define delayOneBit  {      \
       char ti;               \
       ti = 63;               \
       do ; while( --ti > 0); \
       nop();                 \
    }  /* total: 5 + 33*(3+9) - 1 + 1 + 9 \
          = 416.6 microsec. at 4 MHz */
 #endif

 #ifdef BPS2400
  #define delayOneBit  {      \
       char ti;               \
       ti = 100;               \
       do {nop();} while( --ti > 0); \
       nop();                 \
    }  /* total: 5 + 33*(3+9) - 1 + 1 + 9 \
          = 416.6 microsec. at 4 MHz */
 #endif

 #ifdef BPS1200
  #define delayOneBit  {      \
       char ti;               \
       ti = 137;               \
       do {nop(); nop(); nop(); } while( --ti > 0); \
       nop();                 \
    }  /* total: 5 + 33*(3+9) - 1 + 1 + 9 \
          = 416.6 microsec. at 4 MHz */
 #endif

#endif
#endif

void sendData( char dout)
/* sends one byte */
{
   RS232_out = 0;  /* startbit */
   delayStart
   for (bitCount = 9; ; bitCount--)  {
       delayOneBit
       if (bitCount == 0)
           break;
       Carry = 1;  /* incl. stopbit */
       dout = rr( dout);
       RS232_out = Carry;
   }
}


#define NText 12

#ifndef USE_CONST
char text( char i)
{
   skip(i);
  #pragma return[NText] = "YANGIN VAR"
}
#else
const char text[NText] = "Datmobile US";
#endif

const char ResetMobile[5] = "ATZ\r\n"; //reset mobile
const char NoEcho[6] = "ATE0\r\n"; //no echo
const char FwdMsg[13] = "AT+CNMI=3,3\r\n"; //forward all messages to
mobile phone
const char SndMsg[12] = "AT+CMGS=23\r\n"; //send message to mobile
phone, AT+CMGS=%d\r\n...PDU..
const char Dial[8] = "ATD000\r\n"; //Dial number 000
const char text1[5] = "State";
const char SMSMsg[48] =
"0021000B815063141516F600000AD9A0F3987482AC416928";

/*
#define delay12usec  {      \
    char titemp0;               \
    titemp0 = 30;               \
    do ; while( --titemp0 > 0); \
    nop();                 \
 }  /* total: 5 + 30*3 - 1 + 1 + 9 \
       = 104 microsec. at 4 MHz */
*/

#define delay10usec  {      \
    nop();               \
    nop();                 \
    nop();               \
    nop();                 \
    nop();               \
    nop();                 \
    nop();               \
    nop();                 \
    nop();               \
 } /* to create a total of 12 sec, but, adjusted for the looping delay
at 4 MHz */

#define delay12usec  {      \
    nop();               \
    nop();                 \
    nop();               \
    nop();                 \
    nop();               \
    nop();                 \
    nop();               \
    nop();                 \
    nop();               \
    nop();                 \
 } /* to create a total of 12 sec, but, adjusted for the looping delay
at 4 MHz */


#define delay13usec  {      \
    nop();                 \
    nop();               \
    nop();                 \
    nop();               \
    nop();                 \
    nop();               \
    nop();                 \
 }  /* to create a total of 13 sec, but, adjusted for the looping
delay at 4 MHz */

void send_40KHz(void)
{
     char i;

     i = 8;
     do
     {
      PORTA = 0x05; //The RS232 Txd bit has to be high all the time
      delay12usec;
   
      PORTA = 0x09; //The RS232 Txd bit has to be high all the time
      delay13usec;
   } while ( --i > 0);

   PORTA = 0x01;
}

void delay_1millisec(void)
{
   int temp;
     for (temp = 0; temp < 100; temp++)
     {
          delay10usec;
     }
}

void delay_500millisec(void)
{
   int16 temp;
     for (temp = 0; temp < 500; temp++)
     {
      delay_1millisec();
     }
}

void delay_200millisec(void)
{
   int16 temp;
     for (temp = 0; temp < 250; temp++)
     {
      delay_1millisec();
     }
}


const char Digitext[10] = "0123456789";
void print_dec(unsigned char bytedata)
{
char i_temp, j_temp;

   if (bytedata > 100)
   {
      i_temp = bytedata/100;
      sendData(Digitext[i_temp]);

      j_temp = (bytedata/10);
      i_temp =  j_temp % 10;
      sendData(Digitext[i_temp]);

      i_temp = bytedata % 10;
      sendData(Digitext[i_temp]);
   }
   else if (bytedata > 10)
   {
      i_temp = bytedata/10;
      sendData(Digitext[i_temp]);
      i_temp = bytedata % 10;
      sendData(Digitext[i_temp]);
   }
   else
   { //single digit
      sendData(Digitext[bytedata]);
   }
}

const char Digitext[10] = "0123456789";

void send_SMS(void)
{
  int i;
  for (i = 0; i < 12; i++)
  {
     sendData( SndMsg );
  }
  delay_500millisec();
  for (i = 0; i < 48; i++)
  {
     sendData( SMSMsg );
  }
  sendData( 0x1A );
  sendData( '\r' );
  sendData( '\n' );
}

void main( void)
{
  char i;

   /* NOTE: some devices like the 16F877 have an on-chip analog to
      digital converter with analog input pins that should be
      configured. */
   //ADCON1 = ..; // Refer to the data sheet for init values.

   PORTB = 0x07; // xxxx xx11
   TRISB = 0xFB; // Bit 2: US_Enable_N (output), Bit 1: Ultrasonic
Recvd Bit (Input), Bit 0 : Rxd_RS232 (Input)

   PORTA = 0x01; // xxxx xx11
   TRISA = 0xF0; // xxxx xx10

   serialData = 0;

 #ifdef BPS9600
   OPTION = 2;   // prescaler divide by 8, for 9600 bps
 #endif

 #ifdef BPS4800
   #ifdef UseTMR0
     OPTION = 2;   // prescaler divide by 16, for 4800 bps
   #else
     OPTION = 2;   // prescaler divide by 16, for 4800 bps
   #endif
 #endif

 #ifdef BPS2400
   OPTION = 4;   // prescaler divide by 16, for 2400 bps
 #endif

 #ifdef BPS1200
   OPTION = 4;   // prescaler divide by 16, for 1200 bps
 #endif

   for (i = 0; i < NText; i++)  {
      #ifndef USE_CONST
       sendData( text(i));  /* text string */
      #else
       sendData( text);  /* text string */
      #endif
   }

  while(1)
  {
   LED_Green = 1;
     delay_500millisec();
   LED_Green = 0;
     delay_500millisec();
   while (Button0 == 0)
     {
      LED_Green = 1;
      delay_200millisec();
        LED_Green = 0;
      delay_200millisec();
     }      
  }
}
Başlık: Hi Tech kod derlemede hata
Gönderen: arslan74 - 10 Mayıs 2007, 06:54:24
Merhaba,

Bu gönderdiğini tek bir dosya halindemi yoksa ayrı ayrı dosyalarımı gönderdin. Eğer Tek bir dosya ise zaten çalışmaz. Çalışmamassının sebebi, hi-tech'den değil C nin yazım kurallarına hiç uyulmadığı için derlemez. Cünkü global değişkenler en başta tamınlanır ortada bir yerde global değişken tanımlayamassın.

Selamlar.
Başlık: Hi Tech kod derlemede hata
Gönderen: xenitis - 11 Mayıs 2007, 01:12:37
en azından derleyici hatalarını yazsaydınız daha kolay yardım edilirdi
Başlık: Hi Tech kod derlemede hata
Gönderen: lamercik - 02 Temmuz 2007, 23:31:06
program baştan sona mantık hataları ile dolu ve hi-teck in kendi kütüphanelerinde bulunan tanımlamalar ile bire bir çakışan  yanlış tanımlamalar var...
Başlık: Hi Tech kod derlemede hata
Gönderen: ahmet2004 - 03 Temmuz 2007, 11:59:18
Bu kodlar CC5X  kodları.

Kodlar internette yanlış aktarılıyor.Yanlış kopyalanıyor.

Burayada yazım hataları olan kodlar aktarılmış.

Yönetici arkadaşlar bu konuyu CC5X altına alabilirlermi?