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

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

?? nrf24l01.c

?? AVR Mega88 + nRF24L01 wireless 2.4GHz >> Driver nRF24L01 >> AVRSTUDIO project
?? C
字號:
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/signal.h>

#include "delay.h"
#include "myDef.h"
#include "uart.h"
#include "nrf24l01.h"

unsigned char SPI_Send_command_with_ADDR (unsigned char cmd, unsigned char addr, unsigned char data_byte)
{
    unsigned char temp,command = 0;
    unsigned char j, k;
    command = (cmd << 5) | addr;
    CSN_LOW();
    if (cmd == R_REGISTER)
    {
        if (addr == RX_ADDR_P0 || addr == RX_ADDR_P1 || addr == TX_ADDR)
        {

            status = SPI_SendByte(command);
            for (k = 0; k < 5; k++)
            {
                ADDRESS[k] = SPI_SendByte(NRF_NOP);
            }
            CSN_HIGH();
            return status;
        }
        else
        {
            status = SPI_SendByte(command);
            temp = SPI_SendByte(NRF_NOP);
            CSN_HIGH();
            return temp;
        }
    }
    if (cmd == W_REGISTER)
    {
        if (addr == RX_ADDR_P0)
        {
            status = SPI_SendByte(command);
            for (j = 0; j < 5; j++)
            {
                temp = RX_ADDRESS_P0[j];
                SPI_SendByte(temp);
            }
            CSN_HIGH();
            return status;
        }

        if (addr == RX_ADDR_P1)
        {
            status = SPI_SendByte(command);
            for (j = 0; j < 5;j++)
            {
                temp = RX_ADDRESS_P1[j];
                SPI_SendByte(temp);
            }
            CSN_HIGH();
            return status;
        }

        if (addr == TX_ADDR)
        {
            status = SPI_SendByte(command);
            for (j = 0; j < 5;j++)
            {
                temp = TX_ADDRESS[j];
                SPI_SendByte(temp);
            }
            CSN_HIGH();
            return status;
        }
        else
        {
            temp = SPI_SendByte(command);
            SPI_SendByte(data_byte);
            CSN_HIGH();
            return temp;
        }
    }
    return 1;
}

unsigned char SPI_SendByte(unsigned char DataIn)
{        
    // Start transmission
    SPDR = DataIn;      
                 
    // Wait for transmission complete
    while (!(SPSR & (1<<SPIF)))   
        ;

    return SPDR;
}

void SPI_MasterInit(void)
{
    // Set MOSI, SCK and ENB output, all other input
    DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK)|(1<<DD_SS)|(1<<DD_SIGNAL);

    // Enable SPI, Master, set clock rate fck/64 
    SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
}

unsigned char SPI_Send_command_without_ADDR (unsigned char cmd, unsigned char data_byte)
{
    unsigned char temp = 0;
    CSN_LOW();
    if (cmd == R_RX_PAYLOAD)
    {
        status = SPI_SendByte(cmd);
        temp = SPI_SendByte(NRF_NOP);
        CSN_HIGH();
        return temp;
    }
    if (cmd == W_TX_PAYLOAD)
    {
        status = SPI_SendByte(cmd);
        SPI_SendByte(data_byte);
        CSN_HIGH();
        return status;
    }
    status = SPI_SendByte(cmd);
    CSN_HIGH();
    return status;

}


void NRF_init (void)
{
    CE_LOW();
    delay_us(10);
    CSN_HIGH();

    ///////////////////////////
    // Configure chip nRF24L01
    ///////////////////////////

    // Discard transmission


    //Write CONFIG register (addres - 0x00)

    usart_puts("\n\r ** NRF_init **  \n\r"); 
    status = SPI_Send_command_with_ADDR(W_REGISTER, CONFIG_REG_ADDR, 0x0B);
    usart_SendBcd(status);
    //Write RX_ADDR_P0 register -> Set receive address data Pipe0 -> address in RX_ADDRESS_P0 array
    status = SPI_Send_command_with_ADDR(W_REGISTER, RX_ADDR_P0, NRF_NOP);
    usart_SendBcd(status);
    //Write RX_ADDR_P1 register -> Set receive address data Pipe1 -> address in RX_ADDRESS_P1 array
    status = SPI_Send_command_with_ADDR(W_REGISTER, RX_ADDR_P1, NRF_NOP);
    usart_SendBcd(status);
    //Write TX_ADDR register -> Transmit address. Used for a PTX device only. Address in TX_ADDRESS array
    status = SPI_Send_command_with_ADDR(W_REGISTER, TX_ADDR, NRF_NOP);
    usart_SendBcd(status);
    //Write RX_PW_P0 register -> Set number of bytes in RX payload in data pipe0 -> 1 byte
    status = SPI_Send_command_with_ADDR(W_REGISTER, RX_PW_P0, 1);
    usart_SendBcd(status);
    //Write RX_PW_P1 register -> Set number of bytes in RX payload in data pipe1 -> 1 byte
    status = SPI_Send_command_with_ADDR(W_REGISTER, RX_PW_P1, 1);
    usart_SendBcd(status);

    usart_puts("\n\r");
    
    NRF_prepareForReceive ();
}




/**
 * Send one byte to the air via chip nRF24L01.
 * Addresses are hardcoded:
 * @see RX_ADDRESS_P0 RX_ADDRESS_P1 TX_ADDRESS
 *
 * @param byte The data byte to send.
 */
void NRF_send (unsigned char dataIn)
{
    //unsigned char status_temp;

    // Chip enable low
//    printf(bputc," Test Send ");
    CE_LOW();

    // Setting for TX device
    // Write CONFIG register -> 00001010 - CRC enable, power-up, TX
    status = SPI_Send_command_with_ADDR (W_REGISTER,CONFIG_REG_ADDR, 0x0A);
    //printf(bputc,"%2X",status);

    // Send payload - send any data
    status = SPI_Send_command_without_ADDR (W_TX_PAYLOAD, dataIn);
    //printf(bputc,"%2X",status);

    // Pulse for CE -> starts the transmission.
    CE_HIGH();
    CE_LOW();

    // Read STATUS register
    status = SPI_Send_command_without_ADDR(NRF_NOP, NRF_NOP);
    //printf(bputc,"%2X",status);

    // if exceed number of transmision packets
    if ((status & MAX_RT) != 0) 
    {

        // Clear MAX_RT bit in status register
        status_temp = SPI_Send_command_with_ADDR(W_REGISTER, STATUS_ADDR, (status|MAX_RT));
        //printf(bputc,"%2X",status_temp);

        // No communication event here
//        LCD_printf ("MAX_RT\n");

        // Flush TX FIFO (in TX mode)
        status_temp = SPI_Send_command_without_ADDR(FLUSH_TX, NRF_NOP); // XXX test code
        //printf(bputc,"%2X",status_temp);
    }

    // If packet sent on TX
    if ((status & TX_DS) != 0) 
    {
        // Clear TX_DS bit in status register
        status_temp = SPI_Send_command_with_ADDR(W_REGISTER, STATUS_ADDR, (status|TX_DS));
        //printf(bputc,"%2X",status_temp);

        // Your code here
        //LCD_printf ("TX_DS\n");
    }

    // If TX full
    if ((status & TX_FULL) != 0)
    {
        // Flush TX FIFO (in TX mode)
        status_temp = SPI_Send_command_without_ADDR(FLUSH_TX, NRF_NOP);
        //printf(bputc,"%2X",status_temp);

        // Your code here
        // ...
        //LCD_printf ("TX_FULL\n");
    }

}




/**
 * After sending a byte you may set the device to RX mode.
 */
void NRF_prepareForReceive (void)
{
    // Setting for RX device
    //Write CONFIG register -> 00001010 - CRC enable, power-up, RX
    status = SPI_Send_command_with_ADDR(W_REGISTER,CONFIG_REG_ADDR, 0x0B);
    //printf(bputc," \n\r prepare for recieve %2X",status);
  
}

/**
 * Receive one byte from the air via chip nRF24L01. 
 * Addresses are hardcoded:
 * @see RX_ADDRESS_P0 RX_ADDRESS_P1 TX_ADDRESS
 *
 * @param byte The data byte to receive.
 * @return TRUE: if byte succesfully received.
 *         FALSE: if no input data.
 */
unsigned char NRF_receive (unsigned char * dataIn)
{
    //unsigned char payload;
    //unsigned char status_temp;

    CE_HIGH ();
    if ( ((PORTB & 0b00000010)==0b00000000)) // check interrupt line of nRF24L01...
    {
        // Read STATUS status register
        status = SPI_Send_command_without_ADDR(NRF_NOP, NRF_NOP);
        // Set high when new data arrives RX FIFO
        if ((status & RX_DR) != 0)
        {
            // Chip enable low
            CE_LOW();

            //Read payload data
            payload = SPI_Send_command_without_ADDR(R_RX_PAYLOAD, NRF_NOP);
            usart_putc(payload);
            // Clear RX_DR bit in status register
            status_temp = SPI_Send_command_with_ADDR(W_REGISTER, STATUS_ADDR, (status|RX_DR));
            // Flush RX FIFO
            status_temp = SPI_Send_command_without_ADDR(FLUSH_RX, NRF_NOP); // XXX test code
            return TRUE;
        }
    }
    return FALSE;
}

unsigned char check_recieve_nrf24L01(void)
{
     CE_HIGH ();
	 if ( !chkbit(PIND,5) ) // check interrupt line of nRF24L01...
     {
	    sbi(PORTB,0);
		do{
        	status = SPI_Send_command_without_ADDR(NRF_NOP, NRF_NOP);
        	if ((status & RX_DR) != 0)
        	{
            	CE_LOW();
            	payload = SPI_Send_command_without_ADDR(R_RX_PAYLOAD, NRF_NOP);
            	usart_putc(payload);
            	status_temp = SPI_Send_command_with_ADDR(W_REGISTER, STATUS_ADDR, (status|RX_DR));
			}
            status_temp = SPI_Send_command_without_ADDR(FLUSH_RX, NRF_NOP); // XXX test code           
        }while( !chkbit(PIND,5) );
	    cbi(PORTB,0);       

        NRF_prepareForReceive ();

		return TRUE;
     }

	 return FALSE;
}	


void CSN_HIGH(void)
{
	sbi(nRF24L01_PORT,nRF24L01_CSN);
}

void CSN_LOW (void)
{ 
    delay_us(CSN_TIME);
	cbi(nRF24L01_PORT,nRF24L01_CSN);
}

void CE_HIGH(void)
{ 
	sbi(nRF24L01_PORT,nRF24L01_CE);
    delay_us(CE_HIGH_TIME); 
}

void CE_LOW(void)
{
	cbi(nRF24L01_PORT,nRF24L01_CE);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕色av一区二区三区| 制服.丝袜.亚洲.中文.综合| 91精品午夜视频| 91亚洲精品乱码久久久久久蜜桃 | 99精品国产91久久久久久| 国产一区二区久久| 中文字幕在线不卡视频| 欧美亚洲综合网| 欧美成人一区二区三区在线观看| 青青青伊人色综合久久| 日本vs亚洲vs韩国一区三区| 美腿丝袜亚洲色图| 国产精品人妖ts系列视频| 日本一区二区三区国色天香 | 麻豆成人在线观看| 国产精品免费久久久久| 欧美剧在线免费观看网站 | 色综合中文字幕国产 | 欧美视频一区二区三区在线观看| 狠狠久久亚洲欧美| 国产精品99久久久久久似苏梦涵| 夜夜夜精品看看| 日韩av在线播放中文字幕| 久久精品国产精品亚洲精品| 国产ts人妖一区二区| av在线不卡电影| 在线不卡的av| 日本高清不卡视频| 国产成人免费9x9x人网站视频| jlzzjlzz国产精品久久| 8x福利精品第一导航| 久久久久国产成人精品亚洲午夜| 亚洲欧洲www| 美女网站色91| 日本成人在线网站| 亚洲成人免费看| 国产盗摄女厕一区二区三区| 蜜桃久久久久久| 91丨porny丨蝌蚪视频| 国产在线观看免费一区| 91福利在线观看| 久久久国产午夜精品| 午夜久久久久久久久久一区二区| 夜夜亚洲天天久久| 国产精品亚洲午夜一区二区三区| 91国产福利在线| 在线亚洲一区二区| 久久―日本道色综合久久| 亚洲一区视频在线观看视频| 国产精品一区二区果冻传媒| 国产乱码精品1区2区3区| 欧美在线你懂得| 中文字幕在线播放不卡一区| 久久草av在线| 国产成人aaaa| 高清不卡一区二区在线| 91精品国模一区二区三区| 欧美三日本三级三级在线播放| 91高清视频在线| 欧美区在线观看| 日韩一区欧美小说| 成人晚上爱看视频| 91麻豆产精品久久久久久| 91国模大尺度私拍在线视频| 中文无字幕一区二区三区| 亚洲国产乱码最新视频| 日本vs亚洲vs韩国一区三区| 日韩黄色在线观看| 欧洲精品中文字幕| 夜夜嗨av一区二区三区| 91美女视频网站| 欧美无人高清视频在线观看| 欧美日韩免费在线视频| 亚洲欧美偷拍另类a∨色屁股| 韩日精品视频一区| 久久蜜臀中文字幕| 精品无码三级在线观看视频| 从欧美一区二区三区| 91福利精品第一导航| 亚洲免费在线观看| 91久久香蕉国产日韩欧美9色| 国产精品传媒视频| 日韩高清在线观看| 日韩欧美区一区二| 国产老肥熟一区二区三区| 国产欧美一二三区| 午夜天堂影视香蕉久久| 丰满少妇久久久久久久| 99久久精品国产观看| 综合久久久久久| 欧美高清激情brazzers| 日本欧美久久久久免费播放网| 日韩一本二本av| 成人欧美一区二区三区小说 | 日韩一区二区免费电影| 蜜臀av一区二区三区| 国产日韩v精品一区二区| 亚洲国产一区二区三区| 日韩欧美中文字幕公布| 国产伦精品一区二区三区在线观看| 99re这里只有精品首页| 亚洲免费观看高清完整版在线观看熊| 欧美日韩在线亚洲一区蜜芽| 另类人妖一区二区av| 91九色02白丝porn| 精品一区二区成人精品| 亚洲图片另类小说| 欧美一区二区三区视频在线| 国产精品免费看片| 337p亚洲精品色噜噜| 国产风韵犹存在线视精品| 亚洲成va人在线观看| 中文字幕国产一区二区| 久久99国产精品久久99果冻传媒| 国产精品午夜免费| 国产又粗又猛又爽又黄91精品| 欧美日韩国产综合一区二区三区 | av电影在线观看一区| 亚洲aⅴ怡春院| 国产亲近乱来精品视频| 在线播放/欧美激情| 亚洲制服丝袜av| 久久精品欧美一区二区三区麻豆| 91国内精品野花午夜精品 | 国产精品久久久久久亚洲毛片| 久色婷婷小香蕉久久| 亚洲欧美日韩综合aⅴ视频| 成人av片在线观看| 久久91精品国产91久久小草| 日韩一区二区中文字幕| 91美女在线观看| 国产经典欧美精品| 久久99久久精品| 日韩国产成人精品| 亚洲精品在线免费播放| 欧美日韩色综合| 麻豆视频观看网址久久| 午夜欧美在线一二页| 亚洲精品日日夜夜| 欧美日韩一区二区三区免费看| 亚洲国产色一区| 91精品国产色综合久久不卡蜜臀 | 韩国精品久久久| 性感美女极品91精品| 亚洲精品国产第一综合99久久| 国产清纯白嫩初高生在线观看91 | 欧美日韩精品一二三区| 三级欧美韩日大片在线看| 亚洲欧美另类综合偷拍| 欧美色大人视频| 欧美在线播放高清精品| 欧美性色黄大片| 国产一区久久久| 国产伦精品一区二区三区免费迷| 国产精品热久久久久夜色精品三区| av资源网一区| 91麻豆免费看| 捆绑调教美女网站视频一区| 精品一区二区三区在线播放| 九九九精品视频| 亚洲色图一区二区三区| 日韩精品一区二区三区三区免费| av在线不卡电影| 91黄色小视频| 国产永久精品大片wwwapp| 久久国产三级精品| 粉嫩av一区二区三区| 亚洲444eee在线观看| 免费看欧美女人艹b| 国产一区三区三区| 天堂资源在线中文精品| 欧美国产成人精品| 日韩一区二区麻豆国产| 欧美精品一区二区三区一线天视频| 99这里都是精品| 欧美午夜理伦三级在线观看| 日韩欧美一二三四区| 欧美性大战久久| 日韩欧美激情一区| 中文字幕巨乱亚洲| 日韩在线观看一区二区| 国产精品中文有码| 日韩精品视频网| 国产99精品在线观看| 欧美在线小视频| 91啦中文在线观看| 欧美一区二区私人影院日本| 91无套直看片红桃| 国产精品亚洲第一区在线暖暖韩国 | 天堂蜜桃91精品| 国产在线精品一区二区不卡了| 国产精品视频在线看| 尤物在线观看一区| 中文字幕在线免费不卡| 精品国产乱子伦一区| 欧美高清dvd| 欧美精品v国产精品v日韩精品| 中文字幕免费不卡| 蜜桃视频第一区免费观看| 一本大道久久a久久综合婷婷|