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

📄 24e1.c

📁 利用NTC电阻实现温度测试,带详细文档和C语言代码,测试温度误差在0.5度.
💻 C
字号:

/*=================================================================================================
  Copyright (C), 2005, RCG Tech. Co., Ltd.
  File name:    24E1.C
  Author: Zhangui Duan   Version: v1.3   Date: 2005-3-30

  Description:
     此程序文件主要是完成无线数据的基本发送和传输。
  		1,nRF24E1的初始化控制 
  		2,nRF24E1的数据发射与数据接收
		3,串口数据打印 
		4,延时程序
		5,在主程序main.c中调用这里面的函数
		6,收发速度为250Kbps(最小),发射功率为0dBm(最大),目的是保证发送距离最远
  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个字节,所以发送的有效数据宽度
	   由原来的48位改为56位(1字节前置码+4字节卡号+1字节卡参数值+1字节校验字节)

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

#include "24E1.h"

 #define DATAT_W   		0x70 //发送有效数据宽度:DATA2_W:112位,DATA1_W:112位
 #define DATAR_W   		0x80 //接收有效数据宽度:DATA2_W:128位,DATA1_W:128位
 #define RATE_POWER  	0x4f //收发速度为250Kbps,发射功率为0dBm
unsigned char TxBuf[TNUM];
unsigned char RxBuf[RNUM];
unsigned char TRCOUNT;
unsigned char  TIME;
 RFConfig tconf =
{
    15,
    DATAT_W, DATAT_W,//发送有效数据宽度:DATA2_W:112位,DATA1_W:112位
    0x00, 0x00, 0x00, 0x00, 0x00,//ADDR2地址宽度
	0x00,0xaa, 0xbb, 0x12, 0x34, //ADDR1地址宽度 
	0x83, RATE_POWER, //250Kbps,0dBm
	0x04
};
 RFConfig rconf =
{
    15,
    DATAR_W, DATAR_W, //接收有效数据宽度:DATA2_W:112位,DATA1_W:112位
	0x00, 0x00, 0x00, 0x00, 0x00,//ADDR2地址宽度
	0x00, 0xaa, 0xbb, 0x12, 0x34,//ADDR1地址宽度 
	0x83, RATE_POWER,//250Kbps,0dBm
    0x05
};

/***************************************************************************************
  Function:        WriteRTC
  Description:     RTC定时时钟初始化
  Calls:           
  Called By:      
  			 void main(void)
  Input:        
  Output:    
  Return:    
  Others:    
***************************************************************************************/
void WriteRTC(unsigned int w)
{
    while(REGX_CTRL & 0x10)             // Wait for the interface to be ready
        ;
    REGX_MSB = w >> 8;
    REGX_LSB = w & 0xff;
    REGX_CTRL = 0x0a;
    while(REGX_CTRL & 0x10)             // Wait for the interface to be ready
        ;
}

/***************************************************************************************
  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:        	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;	 //开配置方式
	CE = 0;	 
    Delay100us(0);
    for(i=0;i<tconf.n;i++)
    {
        SpiReadWrite(tconf.buf[i]);//发送器配置字
    }
    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 hs finished transmitting
            ;  
	//	PutChar(txbuf[i]);		    //送串口显示      
    }
    CE = 0;			 //激活ShockBurst发送
    //Delay100us(3);   // Wait ~300us
}

/***************************************************************************************
  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]);//发送接收器配置字
    }

    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;
   // Delay100us(30);
	while(DR1==1)
    {   
	    CS = 0;	 //关配置方式   
    	CE = 0;	 //关收发功能
       	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);
		}
    }
	    //CS = 0;	 //关配置方式   
    //	CE = 0;	 //关收发功能

}    


/*
char GetChar(void)
{
    while(!RI)
        ;
    RI = 0;
    return SBUF;
}

*/
/*
void PutChar(char c)
{
    while(!TI)
        ;
    TI = 0;
    SBUF = c;
} 
*/
void PutChar(char c)
{
 	SBUF = c;
	while(TI==0);
	TI = 0;
} 
 
void Delayms(volatile unsigned char n)
{
    unsigned char j;
    while(n--)
        for(j=0;j<10;j++)
	    	Delay100us(10);

}

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

⌨️ 快捷键说明

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