亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? nrf24l01.c

?? C51驅動nrf24l01無線發送
?? C
字號:
#include <intrins.h>
#include "define.h"
#include "nrf24l01.h"


/***************************************************************************************/
/*	  NRF24L01 的管腳定義,以及在本程序中的應用,VCC接3.3V電源,可以通過5V用電壓轉換芯片
/*得到,NC 管腳可以接可以不接,暫時沒用途。本程序應用于51或者52單片機,是兩個模塊進行通訊
/*成功的簡單指示,現象是:模塊1的 KEY1 對應模塊1的LED1 和模塊2的LED3 ,模塊1的 KEY2 對應模
/*塊1的LED2 和模塊2的LED4,發過來也對應。
/***************************************************************************************/

/*****************************************長延時*****************************************/
void Delay(unsigned int s)
{
	unsigned int i;
	for(i=0; i<s; i++);
	for(i=0; i<s; i++);
}
/******************************************************************************************/
/*延時函數
/******************************************************************************************/
void inerDelay_us(unsigned char n)	//延時,us 級
{
	for(;n>0;n--)
		_nop_();
}
/****************************************************************************************/
/*NRF24L01初始化
/***************************************************************************************/
void init_NRF24L01(void)
{
  inerDelay_us(100);
 	CE=0;    // 芯片使能
 	CSN=1;   // 禁止 SPI 
 	SCK=0;   // SPI時鐘置低
	SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // 寫本地地址	
	SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 寫接收端地址
	SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      //  頻道0自動	ACK應答允許	
	SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  //  允許接收地址只有頻道0,如果需要多頻道可以參考Page21  
	SPI_RW_Reg(WRITE_REG + RF_CH, 0x02);        //   設置信道工作為2.4GHZ,收發必須一致
	SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //設置接收數據長度,本次設置為32字節
	SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);   		//設置發射速率為1MHZ,發射功率為最大值0dB
}
/****************************************************************************************************/
/*函數:unsigned int SPI_RW(unsigned int unsigned char)
/*功能:NRF24L01的SPI寫時序-----根據SPI協議,寫一字節數據到nRF24L01,同時從nRF24L01 讀出一字節
/****************************************************************************************************/
unsigned int SPI_RW(unsigned int dat)
{
	unsigned int i;
   	for(i=0;i<8;i++) // 循環8次
   	{
		MOSI = (dat & 0x80);  // dat的最高位輸出到MOSI   MSB to MOSI
		inerDelay_us(DELAY);
		dat = (dat << 1);     // 從右向左進一位          shift next bit into MSB..
		SCK = 1;              // 拉高SCK,nRF24L01從MOSI讀入1位數據,同時從MISO輸出1位數據  Set SCK high..
		inerDelay_us(DELAY);
		dat |= MISO;          //讀MISO到 dat 最低位       capture current MISO bit
		inerDelay_us(DELAY);
		SCK = 0;              // SCK置低                  ..then set SCK low again
		inerDelay_us(DELAY);
   	}
    return(dat);          	  //返回讀出的一字節           return read dat
}
/****************************************************************************************************
/*函數:unsigned char SPI_Read(unsigned char reg)
/*功能:NRF24L01的SPI時序-----------從reg寄存器讀一字節
/****************************************************************************************************/
unsigned char SPI_Read(unsigned char reg)
{
	unsigned char reg_val;
	
	CSN = 0;             //CSN置低,開始傳輸數據  CSN low, initialize SPI communication...
	inerDelay_us(DELAY);
	SPI_RW(reg);         //選擇寄存器             Select register to read from..
	reg_val = SPI_RW(0); //然后從該寄存器讀數據   ..then read registervalue
	CSN = 1;             //CSN拉高,結束數據傳輸  CSN high, terminate SPI communication
	inerDelay_us(DELAY);
	
	return(reg_val);     //返回寄存器數據         return register value
}
/****************************************************************************************************/
/*功能:NRF24L01讀寫寄存器函數
/*描述:寫數據value到reg寄存器
/****************************************************************************************************/
unsigned int SPI_RW_Reg(unsigned char reg, unsigned char value)
{
	unsigned char status;
	
	CSN = 0;               // CSN置低,開始傳輸數據      CSN low, init SPI transaction
	inerDelay_us(DELAY);
	status = SPI_RW(reg);  // 選擇寄存器,同時返回狀態字 select register
	SPI_RW(value);         // 然后寫數據到該寄存器       ..and write value to it..
	CSN = 1;               // CSN拉高,結束數據傳輸      CSN high again
	inerDelay_us(DELAY);
	
	return(status);        // 返回狀態寄存器             return nRF24L01 status unsigned char
}
/****************************************************************************************************/
/*函數:unsigned int SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char unsigned chars)
/*功能: 用于讀數據,reg:為寄存器地址,pBuf:為待讀出數據地址,unsigned chars:讀出數據的個數
/*描述: 從reg寄存器讀出bytes個字節,通常用來讀取接收通道數據或接收/發送地址
/****************************************************************************************************/
unsigned int SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char uchars)
{
	unsigned int status,i;
	
	CSN = 0;                 //CSN置低,開始傳輸數據   Set CSN low, init SPI tranaction
	inerDelay_us(DELAY);
	status = SPI_RW(reg);    //選擇寄存器,同時返回狀態字 Select register to write to and read status unsigned char
	
	for(i=0;i<uchars;i++)
		pBuf[i] = SPI_RW(0); //逐個字節從nRF24L01讀出 
	
	CSN = 1;                 //CSN拉高,結束數據傳輸
	inerDelay_us(DELAY);          
	
	return(status);          //返回狀態寄存器      return nRF24L01 status unsigned char
}
/*********************************************************************************************************
/*函數:unsigned int SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char unsigned chars)
/*功能: 用于寫數據:為寄存器地址,pBuf:為待寫入數據地址,unsigned chars:寫入數據的個數
/*描述:把pBuf緩存中的數據寫入到nRF24L01,通常用來寫入發射通道數據或接收/發送地址
/*********************************************************************************************************/
unsigned int SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char uchars)
{
	unsigned int status,i;
	
	CSN = 0;               //CSN置低,開始傳輸數據
	inerDelay_us(DELAY);       
	status = SPI_RW(reg);  //選擇寄存器,同時返回狀態字
	inerDelay_us(DELAY);   
	for(i=0; i<uchars; i++) 
		SPI_RW(*pBuf++);	//逐個字節寫入nRF24L01
	CSN = 1;           //CSN拉高,結束數據傳輸
	inerDelay_us(DELAY);
	return(status);    //返回狀態寄存器 
}
/****************************************************************************************************/
/*函數:void SetRX_Mode(void)
/*功能:數據接收配置 
/****************************************************************************************************/
void SetRX_Mode(void)
{
	CE=0;
	inerDelay_us(DELAY);
	SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);//CRC使能,16位CRC校驗,上電,接收模式 
	CE = 1;    // 拉高CE啟動接收設備
	inerDelay_us(DELAY);
	inerDelay_us(130);
}
/******************************************************************************************************/
/*函數:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
/*功能:數據讀取后放入rx_buf接收緩沖區中
/******************************************************************************************************/
unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
{
    unsigned char revale=0;
	sta=SPI_Read(STATUS);	// 讀取狀態寄存其來判斷數據接收狀況
	if(RX_DR)				// 判斷是否接收到數據
	{
    CE = 0; 			//SPI使能
		inerDelay_us(DELAY);
		SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
		revale =1;			//讀取數據完成標志
	}
	SPI_RW_Reg(WRITE_REG+STATUS,sta);   //接收到數據后RX_DR,TX_DS,MAX_PT都置高為1,通過寫1來清楚中斷標志
	return revale;
}
/***********************************************************************************************************
/*函數:void nRF24L01_TxPacket(unsigned char * tx_buf)
/*功能:發送 tx_buf中數據
/**********************************************************************************************************/
void nRF24L01_TxPacket(unsigned char * tx_buf)
{
	CE=0;			//StandBy I模式	
	inerDelay_us(DELAY);
	SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 裝載接收端地址
	SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); 			 // 裝載數據	
	SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);   		 // IRQ收發完成中斷響應,16位CRC,主發送
	CE=1;		 //置高CE,激發數據發送
	inerDelay_us(130);
}

void nRF24L01_Initial(void)
{
	CE=0;// chip enable
	CSN=1;// Spi disable
	SCK=0;// Spi clock line init high
	MOSI = 1;//mosi input
	IRQ = 1;//IRQ input
	
}
/**************************************************
Function: RX_Mode();

Description:
  This function initializes one nRF24L01 device to
  RX Mode, set RX address, writes RX payload width,
  select RF channel, datarate & LNA HCURR.
  After init, CE is toggled high, which means that
  this device is now ready to receive a datapacket. */
/**************************************************/
/*
void RX_Mode(void)
{
	CE=0;
	inerDelay_us(10);
//	DI();
  SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // Use the same address on the RX device as the TX device

  	//SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      // Enable Auto.Ack:Pipe0
	SPI_RW_Reg(WRITE_REG + EN_AA, 0x00);      // disable Auto.Ack:Pipe0
  SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  // Enable Pipe0
	SPI_RW_Reg(WRITE_REG + SETUP_AW, 0x03);//5byte的地址
	SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x00);//禁止重發
	SPI_RW_Reg(WRITE_REG + RF_CH, 20);        // Select RF channel 2440M
  SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); // Select same RX payload width as TX Payload width
  SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);   // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR
  SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);     // Set PWR_UP bit, enable CRC(2 bytes) & Prim:RX. RX_DR enabled..
//	EI();
  CE=1;
	inerDelay_us(500);
	//IE0 = 0;
	//  This device is now ready to receive one packet of 16 bytes payload from a TX device sending to address
  //  '3443101001', with auto acknowledgment, retransmit count of 10, RF channel 40 and datarate = 2Mbps.

}*/
void RX_Mode(void)
{
	CE=0;  
	SPI_Write_Buf(WRITE_REG  +  RX_ADDR_P0,  TX_ADDRESS,  TX_ADR_WIDTH);  
	SPI_RW_Reg(WRITE_REG  +  EN_AA,  0x01);           //  Enable  Auto.Ack:Pipe0   
	SPI_RW_Reg(WRITE_REG  +  EN_RXADDR,  0x01);    //  Enable  Pipe0   
	SPI_RW_Reg(WRITE_REG  +  RF_CH,  40);               //  Select  RF  channel  40 
	SPI_RW_Reg(WRITE_REG  +  RX_PW_P0,  TX_PLOAD_WIDTH); 	//&  Prim:RX.  RX_DR  enabled..    
	SPI_RW_Reg(WRITE_REG  +  RF_SETUP,  0x07);   
	SPI_RW_Reg(WRITE_REG  +  CONFIG,  0x0f); 
	CE  =  1;  
}
/**************************************************/

/**************************************************
Function: TX_Mode();

Description:
  This function initializes one nRF24L01 device to
  TX mode, set TX address, set RX address for auto.ack,
  fill TX payload, select RF channel, datarate & TX pwr.
  PWR_UP is set, CRC(2 bytes) is enabled, & PRIM:TX.

  ToDo: One high pulse(>10us) on CE will now send this
  packet and expext an acknowledgment from the RX device. */
/**************************************************/
/*
void TX_Mode(unsigned char *Rf_Send_Buf)
{
	CE=0;
	inerDelay_us(10);
  SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // Writes TX_Address to nRF24L01
  SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack
  	//SPI_Write_Buf(WR_TX_PLOAD, Buffer, TX_PLOAD_WIDTH); // Writes data to TX payload
	SPI_Write_Buf(WR_TX_PLOAD, Rf_Send_Buf, TX_PLOAD_WIDTH); // Writes data to TX payload
  	//SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      // Enable Auto.Ack:Pipe0
	SPI_RW_Reg(WRITE_REG + EN_AA, 0x00);      // disable Auto.Ack:Pipe0
  SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  // Enable Pipe0
  SPI_RW_Reg(WRITE_REG + SETUP_AW, 0x03);//5byte的地址
   	//SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 500us + 86us, 10 retrans...
	SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x00);//禁止重發
  SPI_RW_Reg(WRITE_REG + RF_CH, 20);        // Select RF channel 2440M
  SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);   // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR	
	SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); //設置發送數據長度,本次設置為32字節
  	//SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);     // Set PWR_UP bit, enable CRC(2 bytes) & Prim:TX. MAX_RT & TX_DS enabled..
	SPI_RW_Reg(WRITE_REG + CONFIG, 0x3e);//
	CE=1;
	inerDelay_us(500);
	SPI_RW_Reg(FLUSH_TX, 0x00); 
	SPI_RW_Reg(WRITE_REG + STATUS, 0x70);//RESET INTTERUPT
	//IE0 = 0;
}
*/
void TX_Mode(unsigned char *Rf_Send_Buf)
{   
	CE=0;  
	 
	SPI_Write_Buf(WRITE_REG  +  TX_ADDR,  TX_ADDRESS,  TX_ADR_WIDTH);  
	SPI_Write_Buf(WRITE_REG  +  RX_ADDR_P0,  TX_ADDRESS,  TX_ADR_WIDTH);  
	SPI_Write_Buf(WR_TX_PLOAD,  Rf_Send_Buf,  TX_PLOAD_WIDTH);  //  Writes  data  to  TX  payload  
	 
	SPI_RW_Reg(WRITE_REG  +  EN_AA,  0x01);           //  Enable  Auto.Ack:Pipe0   
	SPI_RW_Reg(WRITE_REG  +  EN_RXADDR,  0x01);    //  Enable  Pipe0   
	SPI_RW_Reg(WRITE_REG  +  SETUP_RETR,  0x1a);  //  500us  +  86us,  10  retrans...  
	SPI_RW_Reg(WRITE_REG  +  RF_CH,  40);               //  Select  RF  channel  40   
	SPI_RW_Reg(WRITE_REG  +  RF_SETUP,  0x07);     //  TX_PWR:0dBm,  Datarate:2Mbps,  LNA:HCURR  
	SPI_RW_Reg(WRITE_REG  +  CONFIG,  0x0e);  
	CE=1;  	 
	inerDelay_us(130);
} 
void rec_rf_data(unsigned char *Rf_Rec_Buf)
{
	SPI_Read_Buf(RD_RX_PLOAD,Rf_Rec_Buf,TX_PLOAD_WIDTH);
	RX_Mode();
	SPI_RW_Reg(WRITE_REG + STATUS, 0x70);//RESET INTTERUPT
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久av老司机精品网站导航| 欧美理论片在线| 成人免费毛片app| 在线国产电影不卡| 日韩欧美国产麻豆| 国产精品电影一区二区| 婷婷中文字幕综合| 成人美女视频在线观看18| 中文字幕第一区第二区| 麻豆91在线观看| 在线免费观看不卡av| 亚洲一区二区四区蜜桃| 国产电影一区二区三区| 欧美一区二区福利视频| 一区二区三区精品在线| 成人av资源在线观看| 日韩一级高清毛片| 一区二区三区国产豹纹内裤在线| 欧美精品一卡两卡| 国产盗摄一区二区| 亚洲国产美女搞黄色| 在线中文字幕一区二区| 国产精品国产自产拍高清av王其| 日本道精品一区二区三区| 麻豆精品视频在线观看| 国产精品狼人久久影院观看方式| 欧美丝袜丝交足nylons| 亚洲人成7777| 成人黄页在线观看| 日韩高清一区二区| 在线电影院国产精品| 国产乱码精品一区二区三区av| 制服.丝袜.亚洲.中文.综合| 亚洲永久免费视频| 久久久久久亚洲综合| 国产一区二区在线影院| xnxx国产精品| 国产精品456| 亚洲国产欧美一区二区三区丁香婷| 久久先锋资源网| 欧美日韩日本视频| 日韩高清不卡一区二区| 亚洲国产精品尤物yw在线观看| 91麻豆国产精品久久| 国产精品夫妻自拍| 欧美v日韩v国产v| 高清不卡一区二区| 自拍偷拍欧美精品| 欧美日韩午夜影院| 成人精品一区二区三区四区| 美女视频一区二区| 亚洲午夜一区二区| 中文字幕亚洲在| 欧美在线色视频| 99久久国产综合精品麻豆| 悠悠色在线精品| 日韩视频免费观看高清完整版 | 亚洲摸摸操操av| 国产喂奶挤奶一区二区三区| 成人黄色电影在线| 激情五月播播久久久精品| 欧美国产一区二区| 精品美女一区二区| 日韩一区二区不卡| 欧美精品一卡二卡| 欧美性大战久久| 91蜜桃婷婷狠狠久久综合9色| 国产激情精品久久久第一区二区| 免费成人性网站| 久久亚洲精品国产精品紫薇| 91精品国产色综合久久ai换脸| 欧美伊人久久久久久午夜久久久久| 成人免费高清在线| 成人国产精品免费网站| 高清日韩电视剧大全免费| 国内精品国产成人国产三级粉色 | 欧美日韩国产成人在线免费| 精品无人码麻豆乱码1区2区| 亚洲女同一区二区| 亚洲日本成人在线观看| 国产精品久久久久影院色老大 | 久久久青草青青国产亚洲免观| 日韩一区二区三区三四区视频在线观看| 欧美在线观看禁18| 欧美性生交片4| 欧美日韩激情一区| 欧美一级电影网站| 精品国精品国产| 欧美性受xxxx黑人xyx| 在线观看日韩精品| 欧美高清www午色夜在线视频| 欧美日韩亚洲丝袜制服| 91精品国产一区二区三区蜜臀| 欧美mv日韩mv亚洲| 国产日韩欧美一区二区三区乱码| 制服丝袜日韩国产| 精品国产自在久精品国产| 国产肉丝袜一区二区| 亚洲欧洲精品天堂一级 | 99国产欧美久久久精品| 91久久精品一区二区三| 在线不卡一区二区| 精品国产成人在线影院| 国产精品成人在线观看| 亚洲愉拍自拍另类高清精品| 蜜桃视频在线观看一区二区| 国产精品一区二区三区乱码| 91网站黄www| 欧美一级欧美三级在线观看| 欧美激情一区二区三区不卡| 一区二区三区不卡视频在线观看 | 久久精子c满五个校花| 亚洲人123区| 开心九九激情九九欧美日韩精美视频电影 | 7799精品视频| 国产女主播一区| 亚洲一区在线看| 老司机精品视频线观看86| 99久久免费国产| 久久99久久久欧美国产| 日韩精品一二三| 亚洲影院久久精品| 国产又黄又大久久| 欧美在线免费播放| 国产婷婷一区二区| 香蕉久久一区二区不卡无毒影院| 亚洲一区免费视频| 国产成人亚洲精品青草天美| 91.麻豆视频| 亚洲欧美偷拍三级| 国产精品18久久久| 日韩一级片在线播放| 亚洲精品写真福利| 国产1区2区3区精品美女| 欧美高清激情brazzers| 国产精品麻豆一区二区| 1024成人网色www| 久久国内精品自在自线400部| 91无套直看片红桃| 久久先锋资源网| 日韩成人免费看| 欧美性感一类影片在线播放| 欧美国产一区二区| 国产一区二区三区在线看麻豆| 在线观看成人小视频| 中文字幕国产一区二区| 九一九一国产精品| 91精品国产色综合久久不卡蜜臀| 伊人性伊人情综合网| 成人综合在线观看| 久久精品这里都是精品| 久草热8精品视频在线观看| 在线播放中文一区| 亚洲第一精品在线| 欧美日韩在线一区二区| 亚洲免费伊人电影| 91丨国产丨九色丨pron| 国产日韩欧美电影| 国产精品一二三| 久久久综合网站| 国产乱妇无码大片在线观看| 精品精品欲导航| 麻豆精品在线观看| 欧美一区2区视频在线观看| 午夜激情一区二区| 在线不卡中文字幕播放| 亚洲18女电影在线观看| 欧美日韩国产一区二区三区地区| 亚洲精品视频在线看| 99精品视频在线观看| 亚洲美女免费在线| 欧美综合在线视频| 午夜不卡av在线| 日韩一二三区视频| 久久精品99久久久| 国产日产精品一区| 不卡一区中文字幕| 亚洲欧美色图小说| 欧美三级资源在线| 日本vs亚洲vs韩国一区三区二区 | 一区二区三区在线观看动漫| 色婷婷av一区二区三区软件 | 欧美成人官网二区| 国产一区二区女| 国产精品理论在线观看| 色吊一区二区三区| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美xxxx在线观看| 大桥未久av一区二区三区中文| 中文字幕制服丝袜成人av| 日本福利一区二区| 免费高清在线视频一区·| 国产日韩欧美一区二区三区乱码| 成人免费看片app下载| 一区二区日韩电影| 欧美电影免费观看高清完整版在线观看| 精品一区二区三区视频在线观看| 国产日韩欧美精品综合| 色综合天天综合网天天狠天天| 国产日韩欧美亚洲|