/*---------------------------------------------------------------------
//Copyright (C)
//版权所有
//
//文 件 名:nRF
//功能描述:无线模块数据收发
//
//
//创建标志:朱强 20100708
//
//修改标志:
//修改描述:
//---------------------------------------------------------------------*/
#include <12c5a60s2.h>
#include <intrins.h>
#include <absacc.h>
#include <init.h>
#include <uart.h>
#include <nRF.h>
/****************************************************************************
Function: main
Description: 主函数,对各模块进行初始化,执行检测器工作配置参数的配置,
并根据配置参数进入相应的工作状态;
Input: 无
Output: 无
Return: 无
Others: 所有全局变量的定义都在init.h中,并有相关注释,
右键选择“Go To Definetion Of”查看,
在其他文件使用这些全局变量不再做说明。
******************************************************************************/
void main(void)
{
uinti i;
uchar nRFstate;
for(i=0;i<10;i++) //上电延时,确保供电稳定
{
StateLED=0;TxLED=1;
Delay(5000);
StateLED=1;TxLED=0;
Delay(5000);
}
TxLED=1;
P2M1=0x10; //nRF24L01引脚配置
P2M0=0x0f;
MCUInit(); //微控制器初始化
EA=1; //开启所有中断
Uart_Data='0'; //默认串口接收的数据为‘0’
TR0=0;
ET0=0;
CE=0;
CSN=1;
SCK=0;
do{
SPI_WriteNrf(0x00,0x37);
nRFstate=SPI_ReadNrf(0x00);
HexUartSend(nRFstate);
}while((nRFstate&0x02)!=0x02);
SPI_WriteNrf(EN_AA, 0x00); //频道0自动 ACK应答允许
SPI_WriteNrf(EN_RXADDR, 0x01); //允许接收地址只有频道0
SPI_WriteNrf(SETUP_AW, 0x03); //收发地址宽度为5个字节
SPI_WriteNrf(SETUP_RETR, 0x00); //自动重发时间为4000us,计数重发15次后为发送超时失败
SPI_WriteNrf(RF_CH, 0); //设置信道工作为2.4GHZ,收发必须一致
SPI_WriteNrf(RF_SETUP, 0x07); //设置发射速率为1MHZ,发射功率为最大值0dB
SPI_WriteNrf(RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为32字节
SPI_WriteBuf(TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH); //写本地地址
//SPI_ReadBuf(TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH); //写本地地址
SPI_WriteBuf(RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH); //写接收端地址
SPI_RW(FLUSH_RX);
EX0=1;
EA=1;
CE=0;
CE=1;
while (1);
{
SPI_RW(FLUSH_TX);
//TxLED=0;
Delay(5000);
//TxLED=1;
Delay(5000);
HexUartSend(0xaa);
CE=0; //StandBy I模式
SPI_WriteBuf(RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); //装载接收端地址
SPI_WriteBuf(WR_TX_PLOAD-WRITE_REG, TxBuf, TX_PLOAD_WIDTH); //装载数据
CE=1; //置高CE,激发数据发送
}
}
/****************************************************************************
Function: timer0_int
Description: 定时器0中断服务程序
Input: 无
Output: 无
Return: 无
******************************************************************************/
void Exit0Interrupt(void) interrupt 0
{
uchari Rxbuf[32];
CE=0;
SPI_ReadBuf(RD_RX_PLOAD,Rxbuf,RX_PLOAD_WIDTH);
StateLED=~StateLED;
//HexUartSend('6');
SPI_WriteNrf(0x07,0x70);
SPI_RW(FLUSH_RX);
CE=1;
}
/****************************************************************************
Function: timer0_int
Description: 定时器0中断服务程序
Input: 无
Output: 无
Return: 无
******************************************************************************/
void timer0_int(void) interrupt 1
{
//uchar i;
TH0=TMER/256;
TL0=TMER%256;
}
/****************************************************************************
Function: UART_Interrupt
Description: 串口中断服务程序
Input: 无
Output: 无
Return: 无
******************************************************************************/
void UART_Interrupt(void) interrupt 4
{
if (RI){
Uart_Data=SBUF;
RI=0;
}
}
/************************************************************************************
******************************** End ********************************************
*************************************************************************************/