Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: 122055221 - 16 Ekim 2009, 13:59:19

Başlık: CCS C to PIC basic ??
Gönderen: 122055221 - 16 Ekim 2009, 13:59:19
Arkadaşlar CCS C' ye yabancı olduğum için, aşağıdaki programı Pic BasicPro ya dönüştürmek için yardım edebilirmisiniz. Şimdiden teşekkürler....

#include <16F84A.h>
#fuses NOWDT,HS, NOPUT, NOPROTECT
#use delay(clock=10000000)
#use rs232(baud=19200, xmit=PIN_A2, rcv=PIN_A3)
//#use i2c(master,sda=PIN_C7,scl=PIN_C6,FORCE_HW)
#use i2c(master,sda=PIN_A1,scl=PIN_A0,SLOW)
#define GREEN_LED PIN_B2
#define TRIGGER PIN_B3



BYTE wait_response(void);
BYTE read_response(BYTE *response);
BYTE get_token(void);
BYTE start_read(void);


void main()
{

     BYTE buffer[22];
     BYTE token;

     while(1)
     {

        /*
        while(1)
        {
        output_high(GREEN_LED);
        delay_ms(500);
        output_low(GREEN_LED);
        delay_ms(500);
        }
        */
       
        output_high(GREEN_LED);
        delay_ms(500);
       


        //Read Token - We expect 0x6A or 0x6B
        printf("Read Token:");
        token=get_token();
        printf("%X",token);
        printf("\n \r");




        printf("%X",token);
        printf("\n \r");


        //Start Read
        printf("Starting Read:");

        token=start_read();

        printf("%X",token);
        printf("\n \r");


        //Wait until we get 0x6E token
        printf("Waiting Tag \n \r");
        while(token!=0x6E)
        {
        token=get_token();
        printf("%X",token);
        printf("\n \r");
        delay_ms(500);
        }



        //Now we have 0x6E token. A tag was read . We will request data
        output_high(TRIGGER);
        delay_ms(1000);
        delay_ms(1000);
        delay_ms(1000);

        printf("A Tag was read! \n \r");

        i2c_start();
        i2c_write(0x82);
        i2c_write('R');
        i2c_stop();

        i2c_start();
        i2c_write(0x83);     //0x41h<<1 = 0x82 | 1  = 0x83 (READ )
        buffer[0]=i2c_read();
        buffer[1]=i2c_read();
        buffer[2]=i2c_read();
        buffer[3]=i2c_read();
        buffer[4]=i2c_read(0);
        i2c_stop();

        printf("%X",buffer[0]);
        printf("%X",buffer[1]);
        printf("%X",buffer[2]);
        printf("%X",buffer[3]);
        printf("%X",buffer[4]);
        printf("\n \r");


        i2c_start();
        i2c_write(0x83);     //0x41h<<1 = 0x82 | 1  = 0x83 (READ )
        buffer[0]=i2c_read();
        buffer[1]=i2c_read();
        buffer[2]=i2c_read();
        buffer[3]=i2c_read();
        buffer[4]=i2c_read(0);
        i2c_stop();

        printf("%X",buffer[0]);
        printf("%X",buffer[1]);
        printf("%X",buffer[2]);
        printf("%X",buffer[3]);
        printf("%X",buffer[4]);
        printf("\n \r");


        output_low(TRIGGER);








        output_low(GREEN_LED);
        delay_ms(500);




    }


}

BYTE get_token(void)
{
BYTE tk;

        tk=0;

        i2c_start();
        i2c_write(0x83);     //0x41h<<1 = 0x82 | 1  = 0x83 (READ )
        tk=i2c_read(0);      //NACK before Stop.
        i2c_stop();

        return tk;

}


BYTE start_read(void)
{
BYTE tk;

        i2c_start();
        i2c_write(0x82);     //0x41h<<1 = 0x82 | 0  = 0x82 (WRITE )
        i2c_write(0x10);     //Read Command
        i2c_write(0x03);     //EM4100
        i2c_write(0x02);     //Read two Blocks ( 2 x 4Byte)
        i2c_write(0x00);     //Null
        i2c_write(0x00);     //Null
        i2c_write(0x00);     //Null
        i2c_write(0x00);     //Null
        i2c_write(0x15);     //Checksum 0x10 + 0x03 + 0x02 + 0x00 .... 0x00
        i2c_stop();


        //Read Token - We expect 0x6B (Read is Active). If we read 0x88(busy) token, then make a new read until we dont get 0x88 token.
        tk=0x88;
        while(tk==0x88)
        {
           tk=get_token();

          //Good to put some delay
           delay_ms(1);

        }

        return tk;



}
Başlık: CCS C to PIC basic ??
Gönderen: Okan AKÇA - 16 Ekim 2009, 14:18:40
slm yanlış yerden başlmışsınız kod degistirme diye bir şeyyok tur sadece aynı mantıkda claısan kod yazabilirsiniz
Başlık: CCS C to PIC basic ??
Gönderen: koordinat - 16 Ekim 2009, 19:32:00
bu isteğiniz herhalde amatör yardımdan sapıyor
Başlık: CCS C to PIC basic ??
Gönderen: 122055221 - 16 Ekim 2009, 19:32:18
Benim kastettiğim öyle bişey değildi zaten, Ben Pic BasicPro dilini biliyorum, CCS diline yabancıyım. Bu iki dili bilen bir arkadaş bu programı picbasic pro için yorumlayabilir mi acaba....
Başlık: CCS C to PIC basic ??
Gönderen: 122055221 - 16 Ekim 2009, 19:42:53
Alıntı yapılan: "koordinat"bu isteğiniz herhalde amatör yardımdan sapıyor


Nedemek istediğinizi anlayamadım ama bu kodlar pek profesyonel olmasa gerek. İncelerseniz amatörce bir I2C veri transferiyle ilgili bir program.
Başlık: CCS C to PIC basic ??
Gönderen: koordinat - 16 Ekim 2009, 19:44:03
i2c protokolünü biliyormusunuz.ben şahsen kullanmadım ama programın neresinde takıldıysanız açıklamaya çalışayım
Başlık: CCS C to PIC basic ??
Gönderen: 122055221 - 16 Ekim 2009, 19:53:06
Dediğim gibi CCS ye yabancı olduğumdan, programı tam anlamıyla analiz edemiyorum. Bana genel olarak programın başından sonuna gelene kadar ne yapılmış açıklayabilirmisiniz. Bende bu sayede basicpro ya çevirebilirim. Teşekkürler....
Başlık: CCS C to PIC basic ??
Gönderen: 122055221 - 16 Ekim 2009, 20:06:52
BYTE wait_response(void);
BYTE read_response(BYTE *response);
BYTE get_token(void);
BYTE start_read(void);

Birde burayı anlamadım. Bu değişkenler nasıl değişken
Başlık: Re: CCS C to PIC basic ??
Gönderen: koordinat - 16 Ekim 2009, 20:14:40
Alıntı yapılan: "122055221"
#include <16F84A.h>
#fuses NOWDT,HS, NOPUT, NOPROTECT
#use delay(clock=10000000)
#use rs232(baud=19200, xmit=PIN_A2, rcv=PIN_A3)
//#use i2c(master,sda=PIN_C7,scl=PIN_C6,FORCE_HW)
#use i2c(master,sda=PIN_A1,scl=PIN_A0,SLOW)  //veri sda dır,scl //clocktur
#define GREEN_LED PIN_B2  
#define TRIGGER PIN_B3



BYTE wait_response(void);           //değişkenler
BYTE read_response(BYTE *response);
BYTE get_token(void);
BYTE start_read(void);


void main()
{

     BYTE buffer[22];    //dizi tanımlanıyor 22 elemanlık
     BYTE token;

     while(1)
     {

        /*
        while(1)                                     //burası silinmiş
        {
        output_high(GREEN_LED);
        delay_ms(500);
        output_low(GREEN_LED);
        delay_ms(500);
        }
        */
       
        output_high(GREEN_LED);     //yeşil ledi yaktık
        delay_ms(500);                    //0.5sn bekledik
       


        //Read Token - We expect 0x6A or 0x6B
        printf("Read Token:");        //seri iletişimle token ı oku yazdırıyoruz
        token=get_token();         //get_token fonks.??nerede anlamadım
        printf("%X",token);         //yazdırmaya devam
        printf("\n \r");




        printf("%X",token);         //yazdırma rs232ye
        printf("\n \r");


        //Start Read
        printf("Starting Read:");        //okumaya başlıyoruz

        token=start_read();            //fonks.çağırılıo

        printf("%X",token);          
        printf("\n \r");


        //Wait until we get 0x6E token
        printf("Waiting Tag \n \r");
        while(token!=0x6E)           //token0x6e olmadığı sürece
        {
        token=get_token();        //çağır bakalım
        printf("%X",token);
        printf("\n \r");              //yazdır
        delay_ms(500);          //beklet
        }



        //Now we have 0x6E token. A tag was read . We will request data
        output_high(TRIGGER);    //tetikleme pinini lojik1 yap
        delay_ms(1000);
        delay_ms(1000);   //beklee 1sn her seferde
        delay_ms(1000);

        printf("A Tag was read! \n \r");

        i2c_start();            //i2c haberleşmesi hazır kütüphanesini çağırdı
        i2c_write(0x82);   //0x82 gönderdi
        i2c_write('R');        //yazdı
        i2c_stop();            //durdurdu

        i2c_start();
        i2c_write(0x83);     //0x41h<<1 = 0x82 | 1  = 0x83 (READ )
        buffer[0]=i2c_read();
        buffer[1]=i2c_read();
        buffer[2]=i2c_read();
        buffer[3]=i2c_read();
        buffer[4]=i2c_read(0);
        i2c_stop();

        printf("%X",buffer[0]);
        printf("%X",buffer[1]);
        printf("%X",buffer[2]);
        printf("%X",buffer[3]);
        printf("%X",buffer[4]);
        printf("\n \r");


        i2c_start();
        i2c_write(0x83);     //0x41h<<1 = 0x82 | 1  = 0x83 (READ )
        buffer[0]=i2c_read();
        buffer[1]=i2c_read();
        buffer[2]=i2c_read();
        buffer[3]=i2c_read();
        buffer[4]=i2c_read(0);
        i2c_stop();

        printf("%X",buffer[0]);
        printf("%X",buffer[1]);
        printf("%X",buffer[2]);
        printf("%X",buffer[3]);
        printf("%X",buffer[4]);
        printf("\n \r");


        output_low(TRIGGER);   //tetik sinyalini lojik 0 yaptı








        output_low(GREEN_LED); //yeşil ledi de
        delay_ms(500);




    }


}

BYTE get_token(void)
{
BYTE tk;

        tk=0;

        i2c_start();
        i2c_write(0x83);     //0x41h<<1 = 0x82 | 1  = 0x83 (READ )
        tk=i2c_read(0);      //NACK before Stop.
        i2c_stop();

        return tk;

}


BYTE start_read(void)
{
BYTE tk;

        i2c_start();
        i2c_write(0x82);     //0x41h<<1 = 0x82 | 0  = 0x82 (WRITE )
        i2c_write(0x10);     //Read Command
        i2c_write(0x03);     //EM4100
        i2c_write(0x02);     //Read two Blocks ( 2 x 4Byte)
        i2c_write(0x00);     //Null
        i2c_write(0x00);     //Null
        i2c_write(0x00);     //Null
        i2c_write(0x00);     //Null
        i2c_write(0x15);     //Checksum 0x10 + 0x03 + 0x02 + 0x00 .... 0x00
        i2c_stop();


        //Read Token - We expect 0x6B (Read is Active). If we read 0x88(busy) token, then make a new read until we dont get 0x88 token.
   //biz 0x6b (okuma aktif )jetonu bekiyoruz.ama 0x88(meşgul)jetonu gelirse taki okuma akitf olana kadar yeni okuma yapıyoruz
        tk=0x88;
        while(tk==0x88)
        {
           tk=get_token();

          //Good to put some delay
           delay_ms(1);

        }

        return tk;



}
Başlık: CCS C to PIC basic ??
Gönderen: koordinat - 16 Ekim 2009, 20:17:29
bence program eksik.eksiksiz olduğuna emin misiniz?bazı fonksiyonlar gözükmüyor