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

📄 card.c

📁 9E5收发程序
💻 C
字号:
#include <reg24e1.h>
#define sn1  0x27                   // card ID 
#define sn2  0x12

sbit LED        = P0^6;            //LED: P0.6
#define ADDR_INDEX  10   // Index to address bytes in RFConfig.buf 
#define ADDR_COUNT  2   // Number of address bytes
/******************************************************************
Fun : RTC interrupt service routine	   //RTC中断唤醒掉电模式
******************************************************************/

void RTCISR (void) interrupt 12
{
	WDTI = 0;      //clear WDTI 
} 
//定义结构体来装入RF寄存器配置
struct RFConfig
{
    unsigned char n;
    unsigned char buf[15];
};

typedef struct RFConfig RFConfig;

//配置字
const RFConfig tconf =
{
    15,
    0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x72, 0xaa, 0x43, 0x6f, 0x04
};


//延时时间=n*100us
void Delay100us( unsigned char n)
{
    unsigned char i;
    while(n--)
        for(i=0;i<35;i++)
            ;
}
/****************************************************************
Fun: SPI_DATA R/W		             //SPI数据读写()
****************************************************************/
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 TransmitPacket ( unsigned char b1,unsigned char b2 )
{
    unsigned char i;
	PWR_UP = 1;                     // 打开Radio
    Delay100us(30);				    //等3ms
    CE = 1;
    Delay100us(0);
    for(i=0;i<ADDR_COUNT;i++)
         SpiReadWrite(tconf.buf[ADDR_INDEX+i]);
    SpiReadWrite(b1);
	SpiReadWrite(b2);
    CE = 0;
	Delay100us(3);				    //等300us
}
//初始化
void Init( void )

{
    unsigned char b;

    PSW = 0x20;                     //用工作寄存器R0 

    P0_ALT = 0x00;				    //不用P0口的第二功能
    P0_DIR = 0x00;					//P0为输出

            
    LED = 0;                       // Led on    led :p0.6
    Delay100us(50);
    LED = 1;                       //Led off

	EA = 1;							//中断允许


    SPICLK = 0;                     // Max SPI clock,为1/2CPU速度		 .
    SPI_CTRL = 0x02;                // 将SPI口接到905
	//配置FR
	PWR_UP = 1;                     // 打开Radio
    Delay100us(30);				    //等3ms

    CS = 1;
    Delay100us(0);
    for(b=0;b<tconf.n;b++)			
    {
        SpiReadWrite(tconf.buf[b]);
    }
    CS = 0;
	// 设置、启动RTC
	//REGX_CTRL为看门狗的控制
	//4空闲标志,0:空,1:忙  (只读)
	//3读/写,   0:读,1:写
	//2-0间接寻址
	  while( REGX_CTRL & 0x10 );		//Wait until REGX_CRTL.4 == 0 (i.e. not busy)

    REGX_MSB = 0x07;                //2s
    REGX_LSB = 0xd0;
    
    REGX_CTRL = 0x0A; 				//1010	  写RTC寄存器
	

    EWDI = 1;                       //  Enable RTC interrupt
    
  
}



/***************************************************************

Fun:  send card ID
***************************************************************/

void main ( void )
{


    Init();                        //initialize nrf24e1
    
    while ( 1 )                    // main loop
    {
		
        TransmitPacket(sn1,sn2);
            
        while ( DR1 == 0 );           //transmit data is over
     
        PWR_UP = 0;                  //关闭FR

        Delay100us(16);              
        LED = 0;                       // Led on    led :p0.6
        Delay100us(5);
        LED = 1;                       //Led off

	    CK_CTRL = 0x04;	 				//Deep power down 

        
    }

}



⌨️ 快捷键说明

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