⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfwakeup.c

📁 NRF24E1的唤醒功能
💻 C
字号:
#include <reg24e1.h>
#define TICK   10e-3                    // 10ms (100Hz) tick
/*  LED1-LED4  */
sbit LED1      = P0^7;
sbit LED2      = P0^6;
sbit LED3      = P0^5;
sbit LED4      = P0^4;
const char Test=0xAA;
struct RFConfig
{
    unsigned char n;
    unsigned char buf[15];
};

typedef struct RFConfig RFConfig;

#define ADDR_INDEX  8   // Index to address bytes in RFConfig.buf 
#define ADDR_COUNT  4   // Number of address bytes
const RFConfig tconf =
{
    15,
    0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0xaa, 0xbb, 0x12, 0x34, 0x83, 0x6c, 0x04
};
const RFConfig rconf =
{
    15,
    0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0xaa, 0xbb, 0x12, 0x34, 0x83, 0x6c, 0x05
};

void Delay100us(volatile unsigned char n) reentrant
{
    unsigned char i;
    while(n--)
        for(i=0;i<35;i++)
            ;
}

void Delayms(volatile unsigned char n)  reentrant
{
    unsigned char j;
    while(n--)
        for(j=0;j<10;j++)
	    	Delay100us(10);

}
void WriteRTC(unsigned int m)
{
   while(REGX_CTRL & 0x10)             // Wait for the interface to be ready
        ;
    REGX_MSB = m >> 8;
    REGX_LSB = m & 0xff;
    REGX_CTRL = 0x0a;
  while(REGX_CTRL & 0x10)             // Wait for the interface to be ready
        ;
    
}unsigned char SpiReadWrite(unsigned char b)
{
    EXIF &= ~0x20;                  // Clear SPI interrupt
    SPI_DATA = b;                   // Move byte to send to SPI data register
    while((EXIF & 0x20) == 0x00)    // Wait until SPI hs finished transmitting
        ;
    return SPI_DATA;
}

void Init_Receiver(void)
{
    unsigned char b;

    CS = 1;
    Delay100us(0);
    for(b=0;b<rconf.n;b++)
    {
        SpiReadWrite(rconf.buf[b]);
    }
    CS = 0;
    
    CE = 1;
}	

void TransmitPacket(unsigned char b)
{
    unsigned char i;
    CE = 1;
    Delay100us(0);
    for(i=0;i<ADDR_COUNT;i++)
        SpiReadWrite(tconf.buf[ADDR_INDEX+i]);
    SpiReadWrite(b);
    CE = 0;
    Delay100us(3);                  // Wait ~300us   
}
void Init_transmit(void)
{
      unsigned char b;
    
    CS = 1;
    Delay100us(0);
    for(b=0;b<tconf.n;b++)
    {
        SpiReadWrite(tconf.buf[b]);
    }
    CS = 0;
	}



void RTCISR(void) interrupt 12
{
   unsigned char Temp;
   EA=0;
   WDTI=0;
   LED3=0;
   Delayms(20);  
   LED3=1;
   PWR_UP=1;
   Delay100us(30);
   SPICLK=0;
   SPI_CTRL=0x02;

   Init_transmit();
   TransmitPacket(Test);
   Init_Receiver();

   Delayms(50);
   if(DR1==1)
   {
      Temp=SpiReadWrite(0);
	  if(Temp==Test)
	   {
	     LED2=0;
         Delayms(20);  
         LED2=1;
		 }
	   }

   EA=1;
   }

void main(void)
{
    P0_ALT=0x06;
	P0_DIR=0x06;
    EA=1;
    EWDI=1;

	LED1=0;
    Delayms(20);   
    LED1=1;

    LED2=0;
    Delayms(20);  
    LED2=1;

    LED3=0;
    Delayms(20);  
    LED3=1;
 
    LED4=0;
    Delayms(20);  
    LED4=1;
  
    WriteRTC(5/TICK);
	while(1)
  {
      LED1=0;
      Delayms(20);  
      LED1=1;
      //CK_CTRL = 0x01;
 	  }

  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -