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

📄 nrf905.txt

📁 由于本系统用电池供电
💻 TXT
字号:
请教 nRF905无线收发模块的编程  
编程应该注意哪些?这是无线收发模块的接收程序!我有点看不明白.能不能给我讲一讲这个接收的过程。尤其是StartUART();time0sym();这两个程序的作用不太清楚!好心人给我讲讲吧!十分感谢

#include <reg52.h>

#include <ABSACC.h>

#include <intrins.h>

#include <stdio.h>

#define uint unsigned int//0 ~ 255

#define uchar unsigned char

/////////////////

#define BYTE_BIT00x01

#define BYTE_BIT10x02

#define BYTE_BIT20x04

#define BYTE_BIT30x08

#define BYTE_BIT40x10

#define BYTE_BIT50x20

#define BYTE_BIT60x40

#define BYTE_BIT70x80

////////////////

#define WC0x00

#define RC0x10

#define WTP0x20

#define RTP0x21

#define WTA0x22

#define RTA0x23

#define RRP0x24

bdata unsignedchar DATA_BUF;

#define DATA7((DATA_BUF&BYTE_BIT7) != 0)

#define DATA0((DATA_BUF&BYTE_BIT0) != 0)

sbitflag=DATA_BUF^7;

sbitflag1=DATA_BUF^0;

#define TxRxBuf_Len 4

unsigned char TxRxBuffer[TxRxBuf_Len];

char temp[4];

uintcount=1;

sbitTXEN=P1^0;

sbitTRX_CE=P3^2;

sbitPWR=P1^1;

sbitMISO=P1^6;

sbitMOSI=P1^5;

sbitSCK=P1^7;

sbitCSN=P1^3;

/////////////////////////////////////////////////////

sbitAM=P1^4;

sbitDR=P3^3;

sbitCD=P1^2;

///////////////////////////////////////////////////////

/////////////////////////////////////////////

sbitled1=P2^1;

sbitled0=P2^0;

sbitled2=P2^2;

sbitled3=P2^3;

/////////////////////////////////////////////////////

uchar seg[10]={0xC0,0xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//0~~9段码

//uchar seg1[10]={0x02,0xf2,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08};//0~~9段码

//RF寄存器配置//

unsigned char idata RFConf[11]=

{

0x00,//配置命令//

0x4c,0x0c,0x44,0x04,0x04,0xcc,0xcc,0xcc,0xcc,0x58,//CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振

};

bit lcdbit;

///////////80us延时/////////////////

void Delay(uchar n)

{

uint k;

while(n--)

for(k=0;k<8;k++);

}

void delay1(uint i)

{

for(;i>0;i--);

}

///////////////

unsigned char SpiRead(void)

{

unsigned char j;

for (j=0;j<8;j++)

{

DATA_BUF=DATA_BUF<<1;

SCK=1;

if (MISO)//读取最高位,保存至最末尾,通过左移位完成整个字节

{

DATA_BUF|=BYTE_BIT0;

}

else

{

DATA_BUF&=~BYTE_BIT0;

}

SCK=0;

}

return DATA_BUF;

}

void SpiWrite(unsigned char send)

{

unsigned char i;

DATA_BUF=send;

for (i=0;i<8;i++)

{

if (DATA7)//总是发送最高位

{

MOSI=1;

}

else

{

MOSI=0;

}

SCK=1;

DATA_BUF=DATA_BUF<<1;

SCK=0;

}

}

////////////////初始化nRF905///////////////////

void nRF905Init(void)

{

CSN=1;// Spidisable

SCK=0;// Spi clock line init low

DR=0;// Init DR for input

AM=0;// Init AM for input

CD=0;// Init CD for input

PWR=1;// nRF905 power on

TRX_CE=0;// Set nRF905 in standby mode

TXEN=0;// set radio in Rx mode

}

////////初始化寄存器

void Config905(void)

{

uchar i;

CSN=0;// Spi enable for write a spi command

//SpiWrite(WC);// Write config command写放配置命令

for (i=0;i<11;i++)// Write configration words写放配置字

{

SpiWrite(RFConf[i]);

}

CSN=1;// Disable Spi

}

void SetRxMode(void)

{

TXEN=0;

TRX_CE=1;

Delay(1);// delay for mode change(>=650us)

}

unsigned char CheckDR(void)//检查是否有新数据传入 Data Ready

{

if (DR=1&&TRX_CE==1 && TXEN==0)

{

// Delay(50);

return 1;

}

else

{

return 0;

}

}

void RxPacket(void)//读数据

{

uchar i;

Delay(1);

//TRX_CE=0;// Set nRF905 in standby mode

Delay(100);

TRX_CE=0;

CSN=0;// Spi enable for write a spi command

Delay(1);

SpiWrite(RRP);

// Delay(10000);

// Delay(10000);// Read payload command

for (i = 0 ;i < 4 ;i++)

{// Delay(10000);

//Delay(10000);

//Delay(10000);

//Delay(10000); 

TxRxBuffer[i]=SpiRead();// Read data and save to buffer

// Delay(10000);

//Delay(10000);

//Delay(10000);

}

CSN=1;

Delay(10);

// Delay(10);

TRX_CE=1;

}

////////////////

voidRX(void)

{

SetRxMode();// Set nRF905 in Rx mode

//Delay(10000);

while (CheckDR()==0);

//Delay(10000);

Delay(10);

RxPacket();

//Delay(10000);// Recive data by nRF905

Delay(10);

}

void StartUART( void )

{//波特率4800

SCON = 0x50;

TMOD = 0x20;

TH1 = 0xFA;

TL1 = 0xFA;

PCON = 0x00;

TR1 = 1;

}

void R_S_Byte(uchar R_Byte)

{

SBUF = R_Byte;

while( TI == 0 );//查询法

TI = 0;

}

voidtime0sym()

{

TH0=0xE2 ;//重载计数初始值

TL0=0x00 ;

TR0=1;

ET0=1;

EA=1;

TF0=0 ;//清中断 

}

void time0_int()interrupt 1

{

if(TF0==1)//10ms中断

{

TF0=0 ;//清中断 

TH0=0xE2 ;//重载计数初始值

TL0=0x00 ;

count=count+1 ;

if(count==100)//1s

{

count=0;//每1秒清count ,重新开始等待1秒

}

}

}

void main(void)

{

//char i;

StartUART();

time0sym();

nRF905Init();

Config905();

P0=0x00;

while(1)

{

RX();

Delay(10);

CSN=0;

if(TxRxBuffer[0])

{

if(TxRxBuffer[0]==0x29)

{

//R_S_Byte(TxRxBuffer[0]);

P0=seg[1];

led0=1;led1=1;led2=1;led3=0;

delay1(50);

//led0=1;led1=1;led2=1;led3=1;

}

if(TxRxBuffer[0]==0x30)

{

//P0=0x00;

//R_S_Byte(TxRxBuffer[0]);

P0=seg[2];

led0=1;led1=1;led2=0;led3=1;

delay1(50);

//led0=1;led1=1;led2=1;led3=1;

}

}

}

CSN=1;

Delay(1);

}

 
 

⌨️ 快捷键说明

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