久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1776|回復: 0
收起左側

NRF24L01無線傳輸例程

[復制鏈接]
ID:465246 發表于 2019-4-2 19:28 | 顯示全部樓層 |閱讀模式
  基于C8051F340(C51)單片機,含發送介紹程序

#include "C8051F340.H"
#include "nRF24L01.h"

/*
================================================================================
Function name : Clock_Init( )
Description   : Initialize the system and USB clock
Input         : None
Output        : None
================================================================================
*/
void Clock_Init( void )
{
        INT16U iTmp;

    //Enable internal high speed oscillator
    OSCICN |= 0x83;
    //Enable internal 4X MULL
    if( !( CLKMUL & ( 1<<5 ) ) )
    {
        CLKMUL = 0;
        CLKMUL = 0x00;
        CLKMUL |= ( 1<<7 );
        for( iTmp = 0; iTmp < 200; iTmp ++ );
        CLKMUL |= ( 1<<6 ) | ( 1<<7 );
        for( iTmp = 0; iTmp < 2000; iTmp ++ );
        while( !( CLKMUL & ( 1<<5 ) ) );
    }
    //USB clock: 48MHz, system clock : 48MHz
    CLKSEL = 0x03;
}
/*
================================================================================
Function name : SPI_Init( )
Description   : Initialize the SPI bus
Input         : None
Output        : None
================================================================================
*/
void SPI_Init( void )
{
        SPI0CN = 0x00;
        SPI0CFG |= ( 1<<6 );
        SPI0CKR = 10;
        SPI0CN = 0x01;        //Enable SPI
        XBR0 |= ( 1<<1 );
//strong output
        P0MDOUT |= ( 1<<0 ) | ( 1<<1 ) | ( 1<<2 ) | ( 1<<3 );
        P0 |= ( 1<<0 ) | ( 1<<1 ) | ( 1<<2 ) | ( 1<<3 );
        P0SKIP |= ( 1<<0 );
}
/*
================================================================================
Function name : SPI_ExchangeByte( )
Description   : Exchange a byte via the SPI bus
Input         : -Byte, The byte sent
Output        : The byte returned
================================================================================
*/
INT8U SPI_ExchangeByte( INT8U Byte )
{
        SPI0CN &= ~( 1<<7 );
        while( !( SPI0CN & ( 1<<1 ) ) );
        SPI0DAT = Byte;
        while( !( SPI0CN & ( 1<<7 ) ) );
        SPI0CN &= ~( 1<<7 );
        return SPI0DAT;

        /*INT8U RetValue = 0;
        INT8S btmp;
        for( btmp = 7; btmp >= 0; btmp -- )
        {
                SCK_LOW( );
                MISO_HIGH( );
                if( Byte & ( 1<<btmp ) )
                {
                        MOSI_HIGH( );
                }
                else
                {
                        MOSI_LOW( );
                }
                SCK_HIGH( );
                if( GET_MISO( ) ) RetValue |= ( 1<<btmp );
        }
        SCK_LOW( );
        return RetValue;*/
}
/*
================================================================================
* Name        : Timer1_Init( )
* Description : Initialize the timer1 for baudrate
* Input       : None
* Output      : None
* Note        : None
================================================================================
*///9600
void Timer1_Init( void )
{
    TH1 = 0x30;
    TL1 = 0x30;
    TCON &= 0x3f;
    TMOD &= 0x0F;
    TMOD |= ( 2<<4 );
    CKCON |= 0x00 | ( 0<<3 );
        TCON |= ( 1<<6 );
}
/*
================================================================================
* Name        : UART0_Init( )
* Description : Initialize the UART0, baudrate
* Input       : None
* Output      : None
* Note        : None
================================================================================
*/
static void UART0_Init( void )
{
    SCON0 = ( 1<<4 );

    IE |= ( 1<<4 );
        P0MDOUT |= ( 1<<4 );
    Timer1_Init( );
}
volatile unsigned char *Ptr_Send = 0;
volatile unsigned int SendCount = 0;
volatile unsigned char SendBusy = 0;
static UART0_ISR( void ) interrupt 4
{
    if( SCON0 & ( 1<<1 ) )
    {
        //TX ok
        SCON0 &= ~( 1<<1 );
                if( SendCount != 0 && Ptr_Send != 0 )
                {
                        SendBusy = 1;
                         SBUF0 = *Ptr_Send;
                        SendCount--;
                        Ptr_Send ++;
                }
                else
                {
                         SendBusy = 0;
                }

    }
    else if( SCON0 & ( 1<<0 ) )
    {
        //RX ok
        SCON0 &= ~( 1<<0 );
    }
}
void _delay_ms( INT16U x )
{
    INT16U m;
    while( x -- )
    {
        for( m = 0; m < 5000; m ++ );
    }
}
void UART0_Send( unsigned char *buf, unsigned int size )
{
        while( SendBusy );
        Ptr_Send = buf;
        SendCount = size;
        SCON0 |= ( 1<<1 );
}
void UART0_SendStr( char *str )
{
    UART0_Send( (INT8U*)str, strlen( str ) );
}

int main( void )
{
    INT8U tmp, x;
    char *AskData = "How are you?\r\n";
    INT8U testbuffer[32];

        XBR1 |= ( 1<<6 );
        XBR0 |= ( 1<<0 );
        Clock_Init( );
    SPI_Init( );
    UART0_Init( );
    EA = 1;
    L01_Init( );
    L01_SetTXMode( );
    L01_WriteHoppingPoint( 0 );
        UART0_SendStr( "nRF24L01P Send Start!\r\n" );
        while( 1 )
    {
        for( tmp = 0; tmp < 200; tmp ++ )
        {
            _delay_ms( 10 );
        }
                L01_FlushRX( );
                L01_FlushTX( );
                UART0_SendStr( "Send:" );
                UART0_SendStr( AskData );
        L01_WriteTXPayload_Ack( AskData, strlen( AskData ) );

                while( 1 )
                {
                        tmp = L01_ReadStatusReg( );
                        //USART_SendChar(tmp); //for test
                        tmp &= ( 1<<TX_DS ) | ( 1<<MAX_RT ) | ( 1<<RX_DR );
                        _delay_ms( 1 );
                        if( tmp != 0 )
                        {
                                break;
                        }

                }

        if( tmp & ( 1<<TX_DS ) )
        {
            UART0_SendStr( "Send OK!\r\n" );
                        for( tmp = 0; tmp < 32; tmp ++ )
                {
                    testbuffer[tmp] = 0;
                }
                        x = L01_ReadRXPayload( testbuffer );
                        UART0_SendStr( "Received reply:" );
                        UART0_SendStr( testbuffer );
        }
        if( tmp & ( 1<<MAX_RT ) )
        {
            UART0_SendStr( "Send Fail!\r\n" );
        }
        if( tmp & ( 1<<RX_DR )  )
        {

        }
        L01_ClearIRQ( IRQ_ALL );
    }

        return 0;
}

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99精品国产一区二区青青牛奶 | 久久久久久久国产 | 97色综合| 欧美日韩三区 | 久久国产精品免费一区二区三区 | 亚洲精品自拍视频 | 成人在线免费观看视频 | 99久久精品国产一区二区三区 | www.蜜桃av.com| 午夜电影网站 | 在线免费亚洲视频 | 希岛爱理在线 | 国产在线观看网站 | 色婷婷综合久久久中文字幕 | 国产乱码久久久久久 | 国产视频1区 | 成人av播放 | 精品一区欧美 | 中文精品视频 | 国产精品久久久久久久久久不蜜臀 | 欧美一区二区三区久久精品视 | 国产精品一区二区久久久久 | 久久精品国产99国产精品 | 欧美黄色片 | www.伊人.com| 国产一级特黄视频 | 成人精品视频 | 九九热国产视频 | 91久久久久久久久久久久久 | 懂色av一区二区三区在线播放 | 男女深夜网站 | 蜜桃视频一区二区三区 | 美女操网站 | 亚洲a网| 久久精品色欧美aⅴ一区二区 | 91爱爱·com | 情侣av| 欧美操操操 | 91精品国产一区二区三区蜜臀 | 日本一二区视频 | 日本成人在线免费视频 |