Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

PIC C Veya PICBasicPro

Başlatan refik1, 05 Ekim 2004, 13:40:36

refik1

Arkadaşlar biraz uzun olacak ama kusura bakmayın

Ben PIC C  Veya  PICBasicPro hic kullanmadım
Programları Assembly de yazıyorum kodları direk ben yazınca
işlemcinin tam nerede napıyor gibi soruları kafama takmıyorum

içimde hep şöyle süpheler kalıyor acaba yukarda bahsi gecen
derleyciler gibi programlar kullanırsam

acaba o işlem daha az komutla yapılamazmıydı ?
acba işlemci fazladan bir dongüyemi giriyor ?

hep ince eleyip sık dokuyup Asm olarak yazdım
ama artık birşeyleri hızlandırmam gerekiyor

sizce artık PIC C  mi yoksa   PICBasicPro  kullanmam gerekiyor ?

----------------------------------------------------------------

bir başka soru Programları ICEPIC adlı emilator ile yazıyorum
ASM den baska Sanırım C Dilinide Destekliyor manual inden
bir parça örneği aşagıya kopyalıyorum  ne dili olduğu hakkında
bilgilerinizi bekliyorum

şimdiden teşekkürler.

-------------------------------------------------------------------


#pragma option +l;
#pragma option v;

#include <16C74.H>

#define TRUE    1
#define FALSE   0

// Pin assignments of PORT B
#define SW1        0
#define SW2        1
#define SCAN1      2
#define SCAN2      3
#define GREEN_LED  4
#define RED_LED    5

#define MSEC_20 20   // 20ms delay for 2MHz clock

unsigned int dur;    // Duration
unsigned int scan;   // Value scanned off switches

// test global vars
char char1, char2;
unsigned char uchar1, uchar2;
int int1, int2;
unsigned int uint1, uint2;
short short1, short2;
unsigned short ushort1, ushort2;
long long1, long2;
unsigned long ulong1, ulong2;
bits bit1;
registerw       wreg1;
registerx regx1;

struct TestStructure {    
   char st1;
   char st2;
   int st3;        
};

struct TestStructure TestStruct1;

union TestUnion {
   unsigned long unionLong;
   struct TestStructure TestStruct2;
};

union TestUnion TestUnion1;




int array1[4];

char near* NearPtr;
char far* FarPtr;


///////////////////////////////////////
//
void init_port_B(void) {
 /* Port B I/O assignments
    SW1, SW2     -> input
    SCAN1, SCAN2 -> output
    GREEN, RED   -> output
    RB6, RB7     -> don't care
 */
 //__TRIS(0x03, PORTB);
 // Default values
    PORTB = 0xFF;
}

//////////////////////////////////////
//
void delay(dur) {
#asm
__dur RMB  1
DLY1
   CLRF   __dur
   DECFSZ dur
   GOTO  DLY2
   RETLW  0
DLY2
   DECFSZ __dur
   GOTO   DLY2
   GOTO   DLY1
#endasm
}

///////////////////////////////////////
// Determines which switch is pressed
// Uses:  scan (global variable)
//
void scan_keys() {
// Make SCAN1 and SCAN2 0's
  PORTB.SCAN1 = 0;
  PORTB.SCAN2 = 0;
// Check SW1 and SW2
  scan = PORTB & 0x03;
// Disable scanning
  PORTB.SCAN1 = 1;
  PORTB.SCAN2 = 1;
}

void TestStack_3()
{

  PORTB.SCAN2 = 1;
}

void TestStack_2()
{
  PORTB.SCAN2 = 1;
  TestStack_3();
}

void TestStack_1()
{
  PORTB.SCAN2 = 1;
  TestStack_2();
}

void TestStack()
{
   // test local vars
   unsigned int    test_int;

  PORTB.SCAN2 = 1;
  TestStack_1();
}


///////////////////////////////////////
// PIC16C54 goes here at RESET

void main() {
// Initialize PORTB
    init_port_B();

// Wait till capacitor charges
    delay(MSEC_20);

// Check if key pressed
    scan_keys();

// Turn LED(s) on
   switch(scan) {
     case 1: // Turn Red LED on
         PORTB.RED_LED = 0;
         break;
     case 2: // Turn Green LED on
         PORTB.GREEN_LED = 0;
         break;
     case 3: // Turn both LEDs on
         PORTB.GREEN_LED = 0;
         PORTB.RED_LED = 0;
         break;
   } // switch

// Keep looping till key released
     do {
   delay(MSEC_20);
   scan_keys();
     } while(scan);

// Turn scanning on and sleep
     PORTB.SCAN1 = 0;
     PORTB.SCAN2 = 0;

     
     do {
   TestStack();
     } while (TRUE);

} // main

Erol YILMAZ

En garantilisi dediğiniz gibi ASM. Ama asm gibi düşünmek zor olduğundan yüksek seviyeli dil kullanıyoruz. Sence ASM yazmak zor olmuyorsa bence devam et. Bu arada yüksek seviyeli dil kullanmak, ASM ye komple set çekmek manasına da gelmiyor.
Onun da yanında kullanacağın Y.S.D. derleyicisinin de Bug ları olacağını bil ve öyle tercih yap.
Basic veya C bilmiyorsan, basic daha kolay gelecektir. Ama bence C derleyicisi yazan firmaların ürünleri daha iyi.
PICBASIC PLUS'ı kullanan arkadaşlar iyi diyorlar, ben kullanmıyorum onun için birşey diyemiyorum.

mcihangir

BUG nedir? kısaca açıklayabilirmisiniz.

refik1

kardeş neyi sordun anlayamadım

mcihangir

Alıntı yapılan: "Erol"...Onun da yanında kullanacağın Y.S.D. derleyicisinin de Bug ları olacağını bil ve öyle tercih yap. ..

BUG kelimesine çok rastlıyorum ancak ne amaçla kullanıldığını bilmiyorum.  Sözlük manası böcek olarak geçiyor. "BUG" kelimesi ile ne kasdediliyor?

Erol YILMAZ

Bunu sormanızdan programlamaya yeni başladığınız anlaşılıyor. BUG programcılık için daha çok teknik bir terim olmuş. Aslı da bir böcekten geliyormuş. kısaca hata anlamına geliyor.

axanc

herkes programını tasarlarken hatasız olarak tasarlar.. ancak ileride beklenmedik hatalar çıkar.. mesela bazen oyunlarda bir yerde ölmüş bir düşman vucudunun sadece topuğu çatıya deydiği için tavan seviyesinde durduğunu görürsün.. bu bir bug'dır yani bir tür hata'dır...
Alıntı YapA programming error in a software program that can have unwanted side effects.
Alıntı YapA logic or syntax error in a program, a logic error in the design of a computer system, or a hardware fault. According to folklore, the first computer bug was an actual bug. Discovered by Lieutenant Grace Hopper in 1945 at Harvard, a moth trapped between two electrical relays of the Mark II Aiken Relay Calculator caused the whole machine to shut down.
Uzmanlık: Bilgisayar Müh. öğrenci Derleyici: PicBasic Pro Compiler Ver. 2.45 Program: Proteus 6.2.5 ve MCSP

mcihangir

Alıntı yapılan: "axanc"herkes programını tasarlarken hatasız olarak tasarlar.. ancak ileride beklenmedik hatalar çıkar.. mesela bazen oyunlarda bir yerde ölmüş bir düşman vucudunun sadece topuğu çatıya deydiği için tavan seviyesinde durduğunu görürsün.. bu bir bug'dır yani bir tür hata'dır...

PICC ile yazılmış ve PIC içine yüklenmiş bir program için böyle bir şey mümkünmü?
yani PICC ile hatasız bir program yazıyoruz ve bunu PIC'e yüklüyoruz. yazdığımız program donanım ile birlikte sorunsuz olarak çalışıyor ve bu sistemi günde kesintisiz 10 saat çalıştırıyoruz. bu sistemi aylarca hatta yıllarca kullandıktan sonra PIC 'de,  yazdığımız programda oluşan bug yüzünden beli belirsiz hatalar ortaya çıkabilirmi?

axanc

arkadaşım,

bug dediğimiz olaylar tarasım sırasında düşünülememiş durumlar olarakda tanımlanır.. yani picc ile yazdığın programda mikroişlemcinin hata vermesine neden olmayavak şekilde tasarlanmış bir program (ki picc gibi üst seviyeli dillerin yaptığu programlar oldukça stabil olur) durup dururken bozulmaz.. senin hic düşünmediğin bir durup oluştupunda ne olacağına karar vermediysen o durumda devrenin reset'lenmesi gerekebilir.. (ctrl+alt+del).. :p
Uzmanlık: Bilgisayar Müh. öğrenci Derleyici: PicBasic Pro Compiler Ver. 2.45 Program: Proteus 6.2.5 ve MCSP

mcihangir

tamam anladım. :idea:
teşekkürler.

refik1

Arkadaşlar yani kısaca assembly den vazgeçme en hatasız
oradamı yazarsın diyorsunuz.

mcihangir

hata konusu tamamen sana bağlı. asm' ye güvendiğin kadar yüksek seviyeli dillerede güvenebilirsin. ancak sana tavsiyem hangi işlemci olursa olsun  eğer yeni başlıyorsan asm ile başla. asm 'yi kullanarak MCU'nun yapısını ve mimarisini çok daha çabuk kavrarsın.
ancak yüksek seviyeli dillerin program yazma konusunda,   zaman ve kolaylık açısından asm'ye nazaran büyük avantajları vardır ve eminimki bir kere bunlarla programlamaya başladınmı bir daha mecbur kalmadıkça asm'ye dönmezsin.