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

📄 main.c

📁 nrf905在magicARM实验箱上实现的代码 主函数包含了发送和接受的标准函数 驱动包在NRF905文件夹里
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                                 tank3221@sina.com
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2007-05-26
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:		  都虹云
** Created date:		2007-05-26
********************************************************************************************************/
#include "config.h"

#define  LEDCON    0x00ff0000   // LED流水灯定义字
#define  UART_BPS	115200		// 定义通讯波特率

/*--------------------------------------------------
            控制字、数据缓冲区变量定义区
---------------------------------------------------*/                         
uint8 RfTxCon[10] = { 0x01,0x0c,0x44,0x20,0x20,
                      0xE7,0xE7,0xE7,0xE7,0x5d}; //射频 发射 控制字
                            
uint8 RfRxCon[10] = { 0x01,0x0c,0x44,0x20,0x20,
                      0xcc,0xcc,0xcc,0xcc,0x5d}; //射频 接收 控制字
                          
uint8 TxAddr[4] = { 0xcc,0xcc,0xcc,0xcc };       //发射地址
uint8 RxAddr[4] = { 0xcc,0xcc,0xcc,0xcc };       //接收地址

uint8 TxBuf[32] = {                                            //发送缓冲区
                    0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
                    0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
                    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
                    0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F
                  };
uint8 RxBuf[32] = {                                            //接收缓冲区
                    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                  };
uint8 temp[32] = {                                             //测试数据缓冲区
                    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                  };
/****************************************************************************
* 名    称:DelayNS()
* 功    能:长软件延时 主要应用于串口到PC及实验台LED的显示
* 入口参数:dly		延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void  DelayNS(uint32  dly)
{ 
    uint32 i;
    for(; dly>0; dly--)
    {
       for(i=0;i<5000;i++);
    }
}
/*----------------------------------------------------------------------------
                         串口发送到PC机各函数
-----------------------------------------------------------------------------*/ 
/****************************************************************************
* 名    称:UART0_Ini()
* 功    能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  UART0_Init(void)
{   uint16 Fdiv;

    U0LCR = 0x83;						// DLAB = 1,可设置波特率
    Fdiv = (Fpclk / 16) / UART_BPS;		// 设置波特率
    U0DLM = Fdiv / 256;					// 分频设置高8位		
    U0DLL = Fdiv % 256;					// 分频设置低8位	
    U0LCR = 0x03;                       // 控制启动
}				
/****************************************************************************
* 名    称:UART0_SendByte()
* 功    能:向串口发送字节数据,并等待发送完毕。
* 入口参数:data		要发送的数据
* 出口参数:无
****************************************************************************/
void  UART0_SendByte(uint8 data)
{  
    U0THR = data;				    	// 发送数据
    while( (U0LSR&0x40)==0 );	    	// 等待数据发送完毕
}

/****************************************************************************
* 名    称:UART0_SendStr()
* 功    能:向串口发送一字符串
* 入口参数:srt		要发送的字符串的指针
* 出口参数:无
****************************************************************************/
void  UART0_SendStr(uint8 const *str)
{  
    while(1)
    {  
        if( *str == '\0' ) break;       // 是否发送到最后一个字符
        UART0_SendByte(*str++);	    	// 发送数据
    }
}
/****************************************************************************
* 名    称:Uart()  
* 功    能:数据发送显示到PC机,要发送的数据保存在temp[32]变量中
* 入    口:no 显示的字符数  
* 出    口:无
****************************************************************************/
void Uart(uint8 * tempbuf,uint8 no)
{
    uint8 i ;

    for(i=0;i<no;i++)	
    {  
        UART0_SendByte(tempbuf[i]);    //显示返回数据
        DelayNS(10);
    }
}
/****************************************************************************
* 名    称:Init()
* 功    能:串口0、LED灯初始化
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  Init(void)
{   
    Magic905_Init();
    IO2DIR = LEDCON;
    UART0_Init(); 
}			
/****************************************************************************
* 名    称:main_Tx()  发送端主函数
* 功    能:循环发送数据包,读出发送地址和数据显示到PC上,以LED等闪烁作为标志。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void main_Tx(void)
{
  Init();
             
  nRFconfig(RfTxCon);

  while(1)
  {  
       IO2SET = 0xffffffff;             //  灯灭以表示发包开始
       DelayNS(10);
       TxPacket(TxAddr,RfTxCon[2],TxBuf,RfTxCon[3]);  //  发送数据包
       
       RTxAddr(temp,RfTxCon[2]);                   //  读发送地址
       Delay(1);                  
       Uart(temp,4);                    //  显示发送地址
       RTxData(temp,RfTxCon[3]);        //  读发送数据
       Delay(1);
       Uart(temp,32);           //  显示发送数据
       
       IO2CLR = 0xffaaffff;             //  表示发包结束
       DelayNS(60);
  }
}
/****************************************************************************
* 名    称:main_Rx()  接收端主函数
* 功    能:循环接收数据包,读出接收到的数据显示到PC上,以LED等闪烁作为结束标志。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void main_Rx(void)
{
  uint8 i;               
  Init();
  nRFconfig(RfRxCon);
  while(1)
  {
       RxPacket(RxBuf,32);              //   接收数据包
       
       for(i=0;i<RfRxCon[3];i++)       
       {
           UART0_SendByte(RxBuf[i]);    //   显示接收数据
           DelayNS(10);
       }
       
       IO2CLR = 0xff66ffff;             //   表示成功接收标志
       DelayNS(60);
       IO2SET = 0xffffffff;
       DelayNS(10);         
  }
}

/*********************************************************************************************************
**                            main主函数
********************************************************************************************************/

        int main (void)
{   
      main_Tx(); 
   // main_Rx();
   // main_Txtest();
   // test();
    return 0;
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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