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

📄 24e1.c

📁 RFID模块 RF24E1读卡程序,用Keil C编译成功!
💻 C
字号:
/*============================================================================================
  Copyright (C), 2005, RegalCyber Tech. Co., Ltd.
  File name:    24E1.C
  Author: Zhangui Duan   Version: v1.2   Date: 2005-3-30

  Description:
     此程序文件主要是完成无线数据的基本发送和传输。
  		1,nRF24E1的初始化控制 
  		2,nRF24E1的数据发射与数据接收
		3,串口数据打印 
		4,延时程序
		5,在主程序main.c中调用这里面的函数
		6,收发速度为1Mbps(最大),发送功率为-20dBm(最小)目的是缩短发送距离
  Other Description:
  		 由 Keil C51 V7.05 编译通过

  Function List:  
    1. 	对nRF2401子系统进行数据读写操作
		unsigned char SpiReadWrite(unsigned char b);
	2,	配置接收器
		void Init_Receiver(void);
	3,	接收数据块
		void Receiver(unsigned char *rxbuf);
	4,	发送数据块
		void Transmitter(unsigned char txbuf[]);
		
  History:          
    1. Date: 2005-6-12
       Author:Zhangui Duan 
       Modification: 由于卡号要与普通的IC卡兼容,将卡号设置为4个字节,所以接收的有效数据宽度
	   由原来的40位改为48位(1字节前置码+4字节卡号+1字节校验字节)

============================================================================================*/

#include <24e1.h>
#include "delay.h"
// #define FAR	 1	            //远距离发射

 #define DATAT_W   		0x60 //发送有效数据宽度:DATA2_W:48位,DATA1_W:48位
 #define DATAR_W   		0x70 //接收有效数据宽度:DATA2_W:48位,DATA1_W:48位
#ifdef FAR
 #define RATE_POWER  	0x4f //收发速度为250Kbps,发射功率为0dBm
#else 
 #define RATE_POWER  	0x4c //收发速度为250Kbps,发射功率为-20dBm
#endif
 unsigned char TxBuf[TNUM];//发送缓冲区
 unsigned char RxBuf[RNUM];//接收缓冲区	
 unsigned char TRCOUNT;	   //发送数据计数器
 unsigned char tconfbuf[2],rconfbuf[2];//发送和接收配置字的最后两个字节
//发送数据格式配置
 RFConfig code tconf =
{
    13,
    DATAT_W, DATAT_W,//发送有效数据宽度:DATA2_W:48位,DATA1_W:48位
    0x00, 0x00, 0x00, 0x00, 0x00,//ADDR2地址宽度
	0x00,0xaa, 0xbb, 0x12, 0x34, //ADDR1地址宽度 
	0x83//, RATE_POWER,//250Kbps,0dBm
   // 0x04
};

//接收数据格式配置
 RFConfig  code rconf =
{
    13,
    DATAR_W, DATAR_W, //接收有效数据宽度:DATA2_W:48位,DATA1_W:48位
	0x00, 0x00, 0x00, 0x00, 0x00,//ADDR2地址宽度
	0x00, 0xaa, 0xbb, 0x12, 0x34,//ADDR1地址宽度 
	0x83//, RATE_POWER, //250Kbps,0dBm
	//0x05
};


/*********************************************************************************************
  Function:        SpiReadWrite
  Description:     对nRF2401子系统进行数据读写操作
  Calls:           
  Called By:      
  			 void Init_Receiver(void)
			 void Transmitter(unsigned char txbuf[])
  Input:     b 
  			 发送的时候是要发送的单个数据,接收的时候初始化值   
  Output:    
  Return:    SPI_DATA
  			 接收数据时是接收的数据
  Others:    
*********************************************************************************************/
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;
}





/*********************************************************************************************
  Function:        	Init_Receiver
  Description:     	配置接收器的接收地址,接收数据长度,接收地址,
  Calls:           	Delay100us();
  					SpiReadWrite();
  Called By:      
  			 		void main(void)
  Input:     					 		   
  Output:    
  Return:    	
  Others:    
*********************************************************************************************/

void Init_Receiver(void)
{
    unsigned char b;
	CE = 0;
    CS = 1;	 //打开配置方式

    Delay100us(0);
    for(b=0;b<rconf.n;b++)
    {
        SpiReadWrite(rconf.buf[b]);//发送接收器配置字
    }
	 SpiReadWrite(rconfbuf[0]);
	 SpiReadWrite(rconfbuf[1]);
    CS = 0;	 //关配置方式   
    CE = 1;	 //使能收发功能
}	

/*********************************************************************************************
  Function:        	Receiver
  Description:     	接收数据块
  Calls:           	Delay100us();
  					SpiReadWrite();
  Called By:      
  			 		void main(void)
  Input:     		*rxbuf
  					存储接收数据的数组的首地址								 		   
  Output:    		接收的数据存放在数据接收数组中
  Return:			    	
  Others:    		在调用此函数之前一定得调用函数Init_Receiver()
  					进行接收初始化配置
  					
*********************************************************************************************/
void Receiver(unsigned char *rxbuf)
{
    unsigned char rnum;
	while(DR1==1)
    {
	    for(rnum=0;rnum<RNUM;rnum++)
		{
			EXIF &= ~0x20;                      // Clear SPI interrupt
        	SPI_DATA = 0;                       // Write dummy byte to SPI data register
        	while((EXIF & 0x20) == 0x00)        // Wait until SPI hs finished receiving
            ;
        	rxbuf[TRCOUNT] = SPI_DATA;
			//PutChar(rxbuf[TRCOUNT]);
			TRCOUNT++;
			if(TRCOUNT==RNUM)TRCOUNT=0;
			Delay100us(3);
		}
    }
}

/*********************************************************************************************
  Function:        	Transmitter
  Description:     	发送数据块
  Calls:           	Delay100us();
  					SpiReadWrite();
  Called By:      
  			 		void main(void)
  Input:     		txbuf[]
  					要发送的数据串								 		   
  Output:    		
  Return:			    	
  Others:    		 					
*********************************************************************************************/
void Transmitter(unsigned char txbuf[])
{
 	unsigned char i;
    CS = 1;	 //开配置方式
    Delay100us(0);
    for(i=0;i<tconf.n;i++)
    {
        SpiReadWrite(tconf.buf[i]);//发送发送器配置字
    }
     SpiReadWrite(tconfbuf[0]);
	 SpiReadWrite(tconfbuf[1]);
    CS = 0;  				 //关配置方式

	CE = 1;	 //nRF2401开始工作
    Delay100us(0);
    for(i=0;i<ADDR_COUNT;i++)  //发送接收节点地址到nRF2401
        SpiReadWrite(tconf.buf[ADDR_INDEX+i]);

	for (i=0;i<TNUM;i++)
    {
        EXIF &= ~0x20;                      // Clear SPI interrupt
        SPI_DATA = txbuf[i];               // Move byte to send to SPI data register       
        while((EXIF & 0x20) == 0x00)        // Wait until SPI has finished transmitting
            ;  
		//PutChar(txbuf[i]);		    //送串口显示      
    }
    CE = 0;			 //激活ShockBurst发送
    Delay100us(3);   // Wait ~300us
}


void PutChar(char c)
{
    while(!TI);            
    SBUF = c;
	TI = 0;
}

⌨️ 快捷键说明

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