Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

derlemede uyari

Başlatan selvi, 10 Aralık 2013, 19:34:57

olemiss

Kaynak kod dosyasını bir de hex editör vasıtasıyla inceleyin.
Yazılım Mühendisi, Çevirmen.

Gökhan BEKEN

Uyarısız derledim. Siz i değişkenini tanımıyor diyorsunuz ancak o j değişkenini tanımıyor. Çünkü gerçekten de kullanmamışsınız.
Böyle derleyin göreceksiniz.

#include <16f88.h>     // Kullany'lacak denetleyicinin ba?ly'k dosyasy' tany'ty'ly'yor.
#include <math.h>

#use delay(clock=8000000)   // Gecikme fonksiyonu için kullany'lan osilatör frekansy' belirtiliyor
//setup_oscillator(OSC_4MHZ);//#fuses INTRC_IO,NOWDT,PUT,NOPROTECT,NOLVP,NOBROWNOUT,MCLR
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Crystal osc <= 4mhz
#FUSES NOPUT                    //No Power Up Timer
#FUSES MCLR                     //Master Clear pin used for I/O
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOFCMEN                  //Fail-safe clock monitor disabled
#FUSES NOIESO  

#use fast_io(a)
#use fast_io(b)

//const unsigned char tx_test_data[10] = {0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x6d};  // Tx fixed paylaod every 1 second£¬ the 10th data is the checksum


#define SI4432_PWRSTATE_READY      01      // define ready mode
#define SI4432_PWRSTATE_RX         05      // define Rx mode
#define SI4432_Rx_packet_received_interrupt   0x02      // Packet received interrupt
#define EZRADIOPRO_RECEIVED_PACKET_LENGTH     0x4B      // received packet length

#define  TX0_RX1   spi_rw(0x0e|0x80, 0x02)      // antenna state for Rx
#define  TX0_RX0   spi_rw(0x0e|0x80, 0x00)         // antenna state for ready mode ,standby mode, power down mode 

#define LED_RX     pin_a3   //eklenecek kisimlar
//#define button  pin_a3   //eklenecek kisimlar

#define  nIRQ      pin_b6      // MCU   input
#define  SDO       pin_b1      // MCU   input
#define  nSEL      pin_a1      // MCU   output
#define  SDI       pin_b2      // MCU   output
#define  SCK       pin_b4      // MCU   output
#define  SDN       pin_b5      // MCU   output

unsigned char  glo_i=0,glo_rxlen,glo_chksum;

unsigned char count_50hz;

unsigned char ItStatus1, ItStatus2;

unsigned char rf_timeout;

unsigned char rx_buf[64];

typedef struct 
{   
   unsigned char reach_1s               : 1;
   unsigned char rf_reach_timeout         : 1;
   unsigned char is_tx                  : 1;   
}   FlagType;

FlagType                   Flag;

void rx_data(void);

unsigned char spi_byte(unsigned char data);
unsigned char spi_rw(unsigned char addr, unsigned char data);

void SI4432_init(void);

void delay_1ms(unsigned char time);

void port_init(void); 

void timer_init(void);


void main()
{ 
   
   setup_oscillator(OSC_8MHZ);  
   setup_timer_2(T2_DISABLED,0,1);
   setup_adc_ports(no_analogs);
   setup_adc(ADC_OFF);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
   // unsigned char  i, j,rxlen,chksum;
  // OSCCON = 0X70;   // internal osc, 8M osc
   
  // WDTCON = 0X00;  // watchdog
   
   
    port_init();     // initial io port
     
    output_high(SDN);
    delay_1ms(10);   // reset RF module
    
    output_low(SDN);
    delay_1ms(200);   // delay 200ms then enter normal mode 
 
    
    SI4432_init();  // initail RF module
    
    TX0_RX0;   // set antenna 
 
   //output_high(LED_RX) ;delay_ms(500);output_low(LED_RX);delay_ms(1000);  //zamani denemek icin
   timer_init();
   
   count_50hz = 0;
   Flag.reach_1s = 0;

   ////INTCON = 0xc0;   // enable interrupt
   //setup_timer_1(T1_INTERNAL | T1_DIV_BY_8);
   
   //set_timer1(63036);
   
   //enable_interrupts(int_timer1);
   
   while(TRUE)
   {   
      if(input(!nIRQ))
      {    
         ItStatus1 = spi_rw(0x03,0x00);   // clr interrupt                                 //read the Interrupt Status1 register
         ItStatus2 = spi_rw(0x04,0x00);   // clr interrupt
         
         if(ItStatus1&0x02)
         {   
            glo_rxlen = spi_rw(EZRADIOPRO_RECEIVED_PACKET_LENGTH,0x00);      // read packet length
            
            //SCK = 0;
            output_low(SCK);
            //nSEL = 0;
            output_low(nSEL);
            spi_byte(0x7f);      // read data from FiFo
            for(glo_i = 0;glo_i<glo_rxlen;glo_i++)   
            {
               rx_buf[glo_i] = spi_byte(0x00);
            }
           // nSEL = 1;
           output_high(nSEL);
            
            spi_rw(0x07|0x80, SI4432_PWRSTATE_RX);                  // back to receive mode after received data
            
            if(glo_rxlen==10)
            {                              
               glo_chksum = 0;
               for(glo_i=0;glo_i<9;glo_i++)      // cal Checksum
                    glo_chksum += rx_buf[glo_i];
                    
                 if(( glo_chksum == rx_buf[9] )&&( rx_buf[0] == 0x41 ))     // check the checksum and packet                  
                 {                       
                    //LED_RX=LED_RX^1;   // data is correct then flash the LED
                    output_toggle(LED_RX);
                 } 
                 else
                 {
                    rx_data();     // restart Rx when data is not correct.
                 }   
              }
           }   
      }   
   }   
}


void delay_1ms(unsigned char time)
{
   unsigned char i,k;
   for(k = 0; k< time; k++)
   {
      for(i = 0; i<130; i++)
      {
        #asm
         NOP
        #endasm
      }
   }      
}


void timer_init(void)
{
   //T1CON = 0x31; 

   //TMR1IE = 1;
  // TMR1L = 0x78;    //intial timer
   //TMR1H = 0xec;
  
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_8);
  
   set_timer1(63036);                  //intial timer
   enable_interrupts(int_timer1);
   enable_interrupts(GLOBAL);    // enable interrupt
}

#int_timer1
void interrupt_ISR_timer(void)
{
 
    //unsigned char i;
   //if(TMR1IF)
     //if(interrupt_active(int_timer1))  //istenirse ccs c icin eklenebilir
    // {
     
         //TMR1L = 0x78;      // timer = 20ms  
        // TMR1H = 0xec;
      set_timer1(63036);    // timer = 20ms 
   
      rf_timeout++;
      if(rf_timeout == 25)
      {
         Flag.rf_reach_timeout = 1;   // tx timeout or Rx timeout
      }   
      count_50hz++;
          if(count_50hz==50)  // 
           {
                count_50hz=0;
                Flag.reach_1s = 1;   //timer for 1s
                
           } 
          // clear_interrupt(int_timer1); //istenirse ccs c bayragi silmek icin kullanilabilir.
           
         // TMR1IF=0;
   //}
   
} 
void port_init(void) 
{ 
    //ANSEL = 0;
   // ANSELH = 0;   // AD is not used   
   //WPUA = 0;   // no pull up resister
   // IOCA = 0;  // no io interupt
    
    set_tris_a(0x00);
    set_tris_b(0b01000010);
    output_a(0x00);
    output_b(0x00);
}   


void SI4432_init(void)
{   
   ItStatus1 = spi_rw(0x03,0x00);      // clr RF interrupt factor
   ItStatus2 = spi_rw(0x04,0x00);
   
   spi_rw(0x06|0x80, 0x00);           //  Set RF interrupt
   
   spi_rw(0x07|0x80, SI4432_PWRSTATE_READY);   // enter ready mode

   spi_rw(0x09|0x80, 0x7f);     //  load cap = 12P

   spi_rw(0x0a|0x80, 0x05);   // output clk set
   spi_rw(0x0b|0x80, 0xea);    // GPIO 0 digital output
   spi_rw(0x0c|0x80, 0xea);    // GPIO 1 digital output
   
   spi_rw(0x0d|0x80, 0xf4);     // /GPIO 2 = rx data
   
   spi_rw(0x70|0x80, 0x2c);  
   spi_rw(0x1d|0x80, 0x40);     // enable afc
      
   // 1.2K bps setting
   spi_rw(0x1c|0x80, 0x16);   // according to Silabs's excel   
   spi_rw(0x20|0x80, 0x83);     
   spi_rw(0x21|0x80, 0xc0); 
   spi_rw(0x22|0x80, 0x13); 
   spi_rw(0x23|0x80, 0xa9); 
   spi_rw(0x24|0x80, 0x00); 
   spi_rw(0x25|0x80, 0x04);   
   spi_rw(0x2a|0x80, 0x14);
   spi_rw(0x6e|0x80, 0x09);
   spi_rw(0x6f|0x80, 0xd5);   
   //1.2K bps setting end      
   
   spi_rw(0x30|0x80, 0x8c);   // enable PH+ FIFO, enable crc, msb                  
   spi_rw(0x32|0x80, 0xff);   // head = byte0, 1, 2, 3    
   spi_rw(0x33|0x80, 0x42);   //  header = byte 0,1,2,3, sync = byte 3, 2
            
   spi_rw(0x34|0x80, 16);     // preamble = 16 nibbles
   spi_rw(0x35|0x80, 0x20);     // preamble detection = 20bit
   spi_rw(0x36|0x80, 0x2d);     // sync word =  0x2dd4
   spi_rw(0x37|0x80, 0xd4);
   spi_rw(0x38|0x80, 0x00);
   spi_rw(0x39|0x80, 0x00);
   spi_rw(0x3a|0x80, 's');     // header for tx £º¡°swwx"
   spi_rw(0x3b|0x80, 'w');
   spi_rw(0x3c|0x80, 'w');
   spi_rw(0x3d|0x80, 'x');
   spi_rw(0x3e|0x80, 10);     // length of payload = 10
   spi_rw(0x3f|0x80, 's');    // head check £º¡±swwx"
   spi_rw(0x40|0x80, 'w');
   spi_rw(0x41|0x80, 'w');
   spi_rw(0x42|0x80, 'x');
   spi_rw(0x43|0x80, 0xff);     // all bit to be checked 
   spi_rw(0x44|0x80, 0xff);     
   spi_rw(0x45|0x80, 0xff);     
   spi_rw(0x46|0x80, 0xff);     
   spi_rw(0x6d|0x80, 0x07);     // maximum ouput power

   spi_rw(0x79|0x80, 0x0);     // non hop
   spi_rw(0x7a|0x80, 0x0);     // non hop   
   
   spi_rw(0x71|0x80, 0x22);    // FiFo, FSK , not need clk         
   spi_rw(0x72|0x80, 0x20);     // deviation:  20KHz   

   spi_rw(0x73|0x80, 0x0);     // no frequency offset
   spi_rw(0x74|0x80, 0x0);     // no frequency offset
      
   spi_rw(0x75|0x80, 0x53);     // frequency:  433.5
   spi_rw(0x76|0x80, 0x57);  
   spi_rw(0x77|0x80, 0x80);      
}

void rx_data(void)
{   
   //unsigned char i, chksum;
   Flag.is_tx = 0;
   
   spi_rw(0x07|0x80, SI4432_PWRSTATE_READY);   //enter ready mode
   TX0_RX1;      // antenna switch set
   delay_1ms(5);      //
   
   spi_rw(0x08|0x80, 0x03);  //clr tx, Rx fifo
   spi_rw(0x08|0x80, 0x00);  //clr tx, Rx fifo
      
   spi_rw(0x07|0x80,SI4432_PWRSTATE_RX );  // enter rx mode
   
   spi_rw(0x05|0x80, SI4432_Rx_packet_received_interrupt);  // set rf module packet receive interrupt
      
   ItStatus1 = spi_rw(0x03,0x00);      //clr interrupt factor
   ItStatus2 = spi_rw(0x04,0x00);      //clr interrupt factor      
}   


unsigned char spi_byte(unsigned char data)
{
   unsigned char i;
   
   for (i = 0; i < 8; i++)      // spi simulation with normal IO
   {                           // read data at rising edge and wite data at falling edge of the sck
      if (data & 0x80)
        // SDI = 1;
         output_high(SDI);
      else
         //SDI = 0;
         output_low(SDI);
         
      data <<= 1;
      //SCK = 1;
     output_high(SCK);
      
      if (input(SDO))
         data |= 0x01;
      else
         data &= 0xfe;
         
      //SCK = 0;
      output_low(SCK);
   }
   
   return (data);
}
//-------------------------------------------
unsigned char spi_rw(unsigned char addr, unsigned char data)
{
   unsigned char i;
   
   //SCK = 0;
   output_low(SCK);
  // nSEL = 0;
  output_low(nSEL);
   
   for (i = 0; i < 8; i++) 
   {
      if (addr & 0x80)
         //SDI = 1;
         output_high(SDI);
      else
        // SDI = 0;
        output_low(SDI);
      addr <<= 1;
     // SCK = 1;
     output_high(SCK);
     #asm
     // asm("NOP");
       NOP
     #endasm
     // SCK = 0;
     output_low(SCK);
   }
   
   for (i = 0; i < 8; i++) 
   {
      if (data & 0x80)
         //SDI = 1;
         output_high(SDI);
      else
         //SDI = 0;
         output_low(SDI);
      data <<= 1;
      //SCK = 1;
      output_high(SCK);
      if (input(SDO))
         data |= 0x01;
      else
         data &= 0xfe;
      //SCK = 0;
      output_low(SCK);
   }
   //nSEL = 1;
   output_high(nSEL);
   //SCK = 1;
   output_high(SCK);
   return (data);
}
Özel mesaj okumuyorum, lütfen göndermeyin.

selvi

  dogru i degiskeni degilmis ben hep i degiskeni olarak bakiyordum.gorunus olarak i gibi gozukuyor.derledim uyari vermedi.
Yaşam anlamlandırıldıkça kutsaldır....