pic te derleme problemi!

Başlatan Onurhan, 11 Aralık 2007, 14:53:34

Onurhan

merhaba arkadaşlar, bir problemle karşılaştım ve işin içinden çıkamadım, yardımlarınızı bekliyorum.
sorunum ise şöyle:
.........................................
#include <pic.h>
#include <delay.c>

main(void)
{

unsigned int i;
unsigned char dizi[]={
0xFF,0x02,0x0C,0x02,0xFF,0x00, // M
0xFF,0x89,0x89,0x89,0x81,0x00, // E
0xFF,0x11,0x31,0x51,0x8E,0x00, // R
0xFF,0x10,0x10,0x10,0xFF,0x00, // H
0xFC,0x12,0x11,0x12,0xFC,0x00, // A
0xFF,0x89,0x89,0x89,0x76,0x00, // B
0xFC,0x12,0x11,0x12,0xFC,0x00, // A
0x00,0x00,0x00,0x00,0x00,0x00  // Bosluk
};

TRISB=0;

for(;;){
   for(i=0;i<48;i++){
   PORTB=dizi;
   DelayMs(1);  // 1ms bekle
   }
   DelayMs(48); // 48ms bekle
}
}
.........................................
yukarıda yazdığım c kodunu derleyip hex halinde pic'e yüklemek istiyorum, ancak delay komutunda derlemede hata veriyor, derleme işlemi yapmıyor, acaba delay için gerekli kütüphane mi tanımlamam gerekiyor?
derleme için kullandığım program ise picclite isimli programdır.
şimdiden teşekkürler...
................
NOT: ARKADAŞLAR SORUMUN YANITINI FORUMDA BULDUM (HATTA AYNI SORU SORULMUŞ), SANIRIM YETERLİ ARAMA YAPMAMIŞIM, ÖZÜRLERİMİ KABUL EDİN... İYİ ÇALIŞMALAR HERKESE...
cevap linki: https://www.picproje.org/index.php/topic,15093&postdays=0&postorder=asc&highlight=picclite&start=0

F493

derledigin programı kaydettigin dosyanın içine bunları ekle

delay.c nin içine

/*
*   Delay functions
*   See delay.h for details
*
*   Make sure this code is compiled with full optimization!!!
*/

#include   "delay.h"

void
DelayMs(unsigned char cnt)
{
   unsigned char i;
   while (cnt--) {
      i=4;
      while(i--) {
         DelayUs(uS_CNT);   /* Adjust for error */
      } ;
   } ;
}

bunu yaz.

sonra  delay.h olarakta aynı dosyanın içine bunu da koy

/*
*   Delay functions for HI-TECH C on the PIC18
*
*   Functions available:
*      DelayUs(x)   Delay specified number of microseconds
*      DelayMs(x)   Delay specified number of milliseconds
*
*   Note that there are range limits:
*   - on small values of x (i.e. x<10), the delay becomes less
*   accurate. DelayUs is accurate with xtal frequencies in the
*    range of 4-16MHZ, where x must not exceed 255.
*   For xtal frequencies > 16MHz the valid range for DelayUs
*   is even smaller - hence affecting DelayMs.
*   To use DelayUs it is only necessary to include this file.
*   To use DelayMs you must include delay.c in your project.
*
*   Set the crystal frequency in the CPP predefined symbols list
*   on the PICC-18 commmand line, e.g.
*   picc18 -DXTAL_FREQ=4MHZ
*
*   or
*   picc18 -DXTAL_FREQ=100KHZ
*   
*   Note that this is the crystal frequency, the CPU clock is
*   divided by 4.
*
*   MAKE SURE this code is compiled with full optimization!!!
*/

#define   MHZ   *1

#ifndef   XTAL_FREQ
#define   XTAL_FREQ   4MHZ      /* Crystal frequency in MHz */
#endif

#if   XTAL_FREQ < 8MHZ
#define   uS_CNT    238         /* 4x to make 1 mSec */
#endif

#if   XTAL_FREQ == 8MHZ
#define uS_CNT  244
#endif

#if   XTAL_FREQ > 8MHZ
#define uS_CNT  246
#endif

#define FREQ_MULT   (XTAL_FREQ)/(4MHZ)

#define   DelayUs(x)   { unsigned char _dcnt; \
           if(x>=4) _dcnt=(x*(FREQ_MULT)/2); \
           else _dcnt=1; \
           while(--_dcnt > 0) \
            {\
            asm("nop");\
            asm("nop");\
            continue; }\
      }

extern void DelayMs(unsigned char);


en son ise derleyicinin ön işlemci komutlarını şu şekilde degiştir.

#include<htc.h>
#include"delay.h"

şeklinde düzelt

çalışacaktır..

Onurhan

teşekkürler, işime yaradı sağolasın...

electronics1

Alıntı yapılan: F493 - 11 Aralık 2007, 17:28:20derledigin programı kaydettigin dosyanın içine bunları ekle

delay.c nin içine

/*
 *   Delay functions
 *   See delay.h for details
 *
 *   Make sure this code is compiled with full optimization!!!
 */

#include   "delay.h"

void
DelayMs(unsigned char cnt)
{
   unsigned char i;
   while (cnt--) {
      i=4;
      while(i--) {
         DelayUs(uS_CNT);   /* Adjust for error */
      } ;
   } ;
}

bunu yaz.

sonra  delay.h olarakta aynı dosyanın içine bunu da koy

/*
 *   Delay functions for HI-TECH C on the PIC18
 *
 *   Functions available:
 *      DelayUs(x)   Delay specified number of microseconds
 *      DelayMs(x)   Delay specified number of milliseconds
 *
 *   Note that there are range limits:
 *   - on small values of x (i.e. x<10), the delay becomes less
 *   accurate. DelayUs is accurate with xtal frequencies in the
 *    range of 4-16MHZ, where x must not exceed 255.
 *   For xtal frequencies > 16MHz the valid range for DelayUs
 *   is even smaller - hence affecting DelayMs.
 *   To use DelayUs it is only necessary to include this file.
 *   To use DelayMs you must include delay.c in your project.
 *
 *   Set the crystal frequency in the CPP predefined symbols list
 *   on the PICC-18 commmand line, e.g.
 *   picc18 -DXTAL_FREQ=4MHZ
 *
 *   or
 *   picc18 -DXTAL_FREQ=100KHZ
 *   
 *   Note that this is the crystal frequency, the CPU clock is
 *   divided by 4.
 *
 *   MAKE SURE this code is compiled with full optimization!!!
*/

#define   MHZ   *1

#ifndef   XTAL_FREQ
#define   XTAL_FREQ   4MHZ      /* Crystal frequency in MHz */
#endif

#if   XTAL_FREQ < 8MHZ
#define   uS_CNT    238         /* 4x to make 1 mSec */
#endif

#if   XTAL_FREQ == 8MHZ
#define uS_CNT  244
#endif

#if   XTAL_FREQ > 8MHZ
#define uS_CNT  246
#endif

#define FREQ_MULT   (XTAL_FREQ)/(4MHZ)

#define   DelayUs(x)   { unsigned char _dcnt; \
           if(x>=4) _dcnt=(x*(FREQ_MULT)/2); \
           else _dcnt=1; \
           while(--_dcnt > 0) \
            {\
            asm("nop");\
            asm("nop");\
            continue; }\
      }

extern void DelayMs(unsigned char);


en son ise derleyicinin ön işlemci komutlarını şu şekilde degiştir.

#include<htc.h>
#include"delay.h"

şeklinde düzelt

çalışacaktır..


rica etsem kodu açıklama şansın varmıdır