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

📄 deal.c

📁 我写的atmega16驱动的nrf24l01程序
💻 C
字号:
//--------------------------------------------------------
//--------------------------------------------------------
void FlashLed(void)
{
	++Timer300msCount;
	
	if(Timer300msCount>=80)
	{
		Timer300msCount=0;
		bSignal2Hz = ~bSignal2Hz;
		
		if(bSignal2Hz==0)
		{

			if(Led2FlashTimes>0)
			{
				_TurnOnLed2;
				--Led2FlashTimes;
			}			
		}	
		else
		{
			_TurnOffLed2;
		}
	}
}
//--------------------------------------------------------
//--------------------------------------------------------
void Ex0Deal(void)
{
unsigned char	i;
	bBusy = dTrue;
    nrfTxBuf[0] = dRegister_Status;
    nrfTxBuf[1] = 0x00;                       // 使能接收通道0
    SPI_SendData(nrfTxBuf, &nrfTxBuf[0], 2);

//
		ComTxCount=1;
		PtComTx=&nrfTxBuf[0];	
		UDR=dRegister_Status;
		while(ComTxCount>0) 	WDR();
//

	if((nrfTxBuf[1] & (1<<bRX_DR))==(1<<bRX_DR))
	{//接受数据中断
		
		Led2FlashTimes=6;
		
		i=EEPROMread(UserConfigAddress+dRegister_RX_PWP0);
	    nrfTxBuf[0] = dCom_ReadData;
	    SPI_SendData(nrfTxBuf, &nrfRxBuf[0], 33);
	    
		ComTxCount=31;
		PtComTx=&nrfRxBuf[1];	
		UDR=*PtComTx++;
		while(ComTxCount>0) 	WDR();
	}

	if((nrfTxBuf[1] & (1<<bTX_DS))==(1<<bTX_DS))
	{//数据发送中断
		
		Led2FlashTimes=4;
	}
	
	if((nrfTxBuf[1] & (1<<bMAX_RT))==(1<<bMAX_RT))
	{
		Led2FlashTimes=2;
	}

	if((nrfTxBuf[1] & (1<<bTX_Full))==(1<<bTX_Full))
	{
		Led2FlashTimes=1;
	}


    nrfTxBuf[0] = dRegister_Status+dCom_Write;           
    nrfTxBuf[1] = 0x70;                      
    SPI_SendData(nrfTxBuf, &nrfTxBuf[0], 2);
    

	bBusy = dFalse;		
}
//--------------------------------------------------------
//--------------------------------------------------------
void	ComDeal(void)
{
uchar i;
	bBusy = dTrue;
	for(i=0;i<ComRxCount;i++)
	{
		nrfTxDataBuf[i]=ComRxBuf[i];	
	}
	ComRxCount=0;
	bCom2Spi = dFalse;
	
	if(nrfTxDataBuf[0]<0x20)
	{//读寄存器内容
		if(i==1)
		{
			if((nrfTxDataBuf[0]==0x0a)||(nrfTxDataBuf[0]==0x0b)||(nrfTxDataBuf[0]==0x10))
				i=6;
			else i=2;
		    SPI_SendData(nrfTxDataBuf, ComTxBuf, i);
			ComTxCount=i-1;
			PtComTx = &ComTxBuf[1];
			UDR=nrfTxDataBuf[0];			
			while(ComTxCount>0)	WDR();
		}
		else
		{
			bBusy = dFalse;
			return;
		}
	}
	else if(nrfTxDataBuf[0]<0x40)
	{//写寄存器内容
		if((nrfTxDataBuf[0]==0x2a)&&(i==6))
		{//写RxPipe0地址
			EEPROMwrite(RxPipe0Addr+0,nrfTxDataBuf[1]);WDR();
			EEPROMwrite(RxPipe0Addr+1,nrfTxDataBuf[2]);WDR();
			EEPROMwrite(RxPipe0Addr+2,nrfTxDataBuf[3]);WDR();
			EEPROMwrite(RxPipe0Addr+3,nrfTxDataBuf[4]);WDR();
			EEPROMwrite(RxPipe0Addr+4,nrfTxDataBuf[5]);WDR();
			i=6;
		}
		else if((nrfTxDataBuf[0]==0x2b)&&(i==6))
		{//写RxPipe1地址
			EEPROMwrite(RxPipe1Addr+0,nrfTxDataBuf[1]);WDR();
			EEPROMwrite(RxPipe1Addr+1,nrfTxDataBuf[2]);WDR();
			EEPROMwrite(RxPipe1Addr+2,nrfTxDataBuf[3]);WDR();
			EEPROMwrite(RxPipe1Addr+3,nrfTxDataBuf[4]);WDR();
			EEPROMwrite(RxPipe1Addr+4,nrfTxDataBuf[5]);WDR();
			i=6;
		}
		else if((nrfTxBuf[0]==0x30)&&(i==6))
		{//写TxPipe地址
			EEPROMwrite(TxPipeAddr+0,nrfTxDataBuf[1]);WDR();
			EEPROMwrite(TxPipeAddr+1,nrfTxDataBuf[2]);WDR();
			EEPROMwrite(TxPipeAddr+2,nrfTxDataBuf[3]);WDR();
			EEPROMwrite(TxPipeAddr+3,nrfTxDataBuf[4]);WDR();
			EEPROMwrite(TxPipeAddr+4,nrfTxDataBuf[5]);WDR();
			i=6;
		}
		else if(i == 2)
		{
			EEPROMwrite(UserConfigAddress+nrfTxBuf[0]-0x20,nrfTxDataBuf[1]);WDR();
		}
		else 
		{
			bBusy = dFalse;
			return;
		}
	    SPI_SendData(nrfTxDataBuf, ComTxBuf, i);
		ComTxCount=i-1;
		PtComTx = &ComTxBuf[1];
		UDR=nrfTxDataBuf[0];			
		while(ComTxCount>0)	WDR();
	}
	else if((nrfTxDataBuf[0] == dCom_ReadData)&&(i=1))
	{
	    SPI_SendData(nrfTxDataBuf, &nrfRxBuf[0], 33);
	    
		ComTxCount=31;
		PtComTx=&nrfRxBuf[0];	
		UDR=*PtComTx++;
		while(ComTxCount>0) 	WDR();
	}
	else if((nrfTxDataBuf[0] == dCom_WriteData)&&(i>1))
	{
		nRF_SendData(i);		
	}
	else if((i==1)
	      &&((nrfTxDataBuf[0] == dCom_ClrTxFIFO)
	       ||(nrfTxDataBuf[0] == dCom_ClrRxFIFO)
	       ||(nrfTxDataBuf[0] == dCom_RESUT_TX_PL)))
	{
	    SPI_SendData(nrfTxDataBuf, ComTxBuf, 1);
		ComTxCount=0;
		UDR=nrfTxDataBuf[0];
		while(ComTxCount>0) 	WDR();
	}		

	bBusy = dFalse;
}
//--------------------------------------------------------
//--------------------------------------------------------
//--------------------------------------------------------
//--------------------------------------------------------
//--------------------------------------------------------
//--------------------------------------------------------
//--------------------------------------------------------
//--------------------------------------------------------

⌨️ 快捷键说明

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