当前位置:首页 » 币种行情 » trx4和km2和cc01哪个好

trx4和km2和cc01哪个好

发布时间: 2024-05-08 04:49:47

『壹』 两片单片机的无线传输用NRF905 接收端 发送端 程序分别怎么写 好困惑

NRF905的程序中只有nRF905Init();Config905();RX();前两个初始化,后个传输函数,执行后在TRXBUF数组中会有相应的值。以下是接收的主函数,这是控制电机左右转动的程序。(小车部分)

voidmain(void)

{

nRF905Init();

Config905();

while(1)

{

RX();

if(TxRxBuf[0]==0x11){in1=1;in2=0;in5=1;in6=0;}//从左往右

if(TxRxBuf[1]==0x11){in3=1;in4=0;in7=1;in8=0;}//从右往左

if(TxRxBuf[0]==0x22){in1=1;in2=1;in5=1;in6=1;}//从左往右

if(TxRxBuf[1]==0x22){in3=1;in4=1;in7=1;in8=1;}//从右往左

in1=1;in2=0;

}

}

遥控部分:就俩按键一个做转一个右转这是无线遥控小车的遥控部分。

voidmain(void)

{

nRF905Init();

Config905();

while(1)

{

if(KEY0==0){TxRxBuf[0]=0x11;}

if(KEY0==1){TxRxBuf[0]=0x22;}

if(KEY1==0){TxRxBuf[1]=0x11;}

if(KEY1==1){TxRxBuf[1]=0x22;}

SetTxMode();//SetnRF905inTxmode

TxPacket(TxRxBuf);//SenddatabynRF905

}

}

那么在设置上:就按以下设置:

#include<reg52.h>

#include<ABSACC.h>

#include<intrins.h>

#include<stdio.h>

//----------------------------------------------------------------------------------------------------------------

#defineuintunsignedint

#defineucharunsignedchar

//----------------------------------------------------------------------------------------------------------------

#defineBYTE_BIT0 0x01

#defineBYTE_BIT1 0x02

#defineBYTE_BIT2 0x04

#defineBYTE_BIT3 0x08

#defineBYTE_BIT4 0x10

#defineBYTE_BIT5 0x20

#defineBYTE_BIT6 0x40

#defineBYTE_BIT7 0x80

//----------------------------------------------------------------------------------------------------------------

bdataunsignedcharDATA_BUF;

#defineDATA7 ((DATA_BUF&BYTE_BIT7)!=0)

#defineDATA0((DATA_BUF&BYTE_BIT0)!=0)

sbit flag =DATA_BUF^7;

sbit flag1 =DATA_BUF^0;

//---------------------------------------------------发送数据缓冲区-------------------------------------------------

#defineTxRxBuf_Len4

unsignedcharTxRxBuf[TxRxBuf_Len]=

{

0x29,0x30,0x31,0x32,

};

//----------------------------------------------NRF905控制IO------------------------------------------------------

sbit TXEN=P1^0;

sbit TRX_CE=P3^2;

sbit PWR=P1^1;

//----------------------------------------------NRF905SPI接口---------------------------------------------------

sbit MISO=P1^6;

sbit MOSI=P1^5;

sbit SCK=P1^7;

sbit CSN=P1^3;

//----------------------------------------nrf905状态标志---------------------------------------------------------

sbit AM=P1^4;

sbit DR=P3^3;

sbit CD=P1^2;

//---------------------------------------------------------------------------------------------------------------

sbit led3=P2^0;

sbit led2=P2^1;

sbit led1=P2^2;

sbit led0=P2^3;

//--------------------------------------------------------------------------------------------------------------

sbit KEY0=P3^6;

sbit KEY1=P3^7;

//--------------------------------------------------------------------------------

sbit BELL=P3^4;

//-----------------------------------------------------------------------------------------------------------------

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

//-------------------------------------------------------nrf905控制指令-------------------------------------------

#defineWC 0x00

#defineRC 0x10

#defineWTP 0x20

#defineRTP 0x21

#defineWTA 0x22

#defineRTA 0x23

#defineRRP 0x24

//------------------------------------------------NRF905寄存器配置------------------------------------------------

unsignedcharidataRFConf[11]=

{

0x00,//配置命令//

0x4c,//CH_NO,配置频段在430MHZ

0x0c,//输出功率为10db,不重发,节电为正常模式

0x44,//地址宽度设置,为4字节

0x04,0x04,//接收发送有效数据长度为32字节

0xCC,0xCC,0xCC,0xCC,//接收地址

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

};

codeTxAddress[4]={0xcc,0xcc,0xcc,0xcc};

chartf;

//------------------------------------------------延时------------------------------------------------------------

staticvoidDelay(ucharn)

{

uinti;

while(n--)

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

}

//---------------------------------------------------SPI读函数-----------------------------------------------------

unsignedcharSpiRead(void)

{

unsignedcharj;

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;

}

returnDATA_BUF;

}

//-------------------------------------------------SPI写函数----------------------------------------------------------

voidSpiWrite(unsignedcharsend)

{

unsignedchari;

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---------------------------------------------

voidnRF905Init(void)

{

CSN=1; //Spi disable

SCK=0; //Spiclocklineinitlow

DR=0; //InitDRforinput

AM=0; //InitAMforinput

CD=0; //InitCDforinput

PWR=1; //nRF905poweron

TRX_CE=0; //SetnRF905instandbymode

TXEN=0; //setradioinRxmode

}

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

voidConfig905(void)

{

uchari;

CSN=0; //Spienableforwriteaspicommand

//SpiWrite(WC); //Writeconfigcommand写放配置命令

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

{

SpiWrite(RFConf[i]);

}

CSN=1; //DisableSpi

}

//-----------------------------------------------------发送数据打包---------------------------------------------------

voidTxPacket(uchar*TxRxBuf)

{

uchari;

//Config905();

CSN=0;

SpiWrite(WTP); //Writepayloadcommand

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

{

SpiWrite(TxRxBuf[i]); //Write32bytesTxdata

}//Spienableforwriteaspicommand

CSN=1;

Delay(1); //Spidisable

CSN=0; //Spienableforwriteaspicommand

SpiWrite(WTA); //Writeaddresscommand

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

{

SpiWrite(TxAddress[i]);

}

CSN=1; //Spidisable

TRX_CE=1; //SetTRX_CEhigh,startTxdatatransmission

Delay(1); //while(DR!=1);

TRX_CE=0; //SetTRX_CElow

}

//----------------------------------------------------------设置发送状态---------------------------------------------

voidSetTxMode(void)

{

TRX_CE=0;

TXEN=1;

Delay(1); //delayformodechange(>=650us)

}

//-----------------------------------------------设置发送状态---------------------------------------------------

voidSetRxMode(void)

{

TXEN=0;

TRX_CE=1;

Delay(1); //delayformodechange(>=650us)

}

//-------------------------------------------------判断数据接收状态-----------------------------------------------------

unsignedcharCheckDR(void) //检查是否有新数据传入DataReady

{

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

{

//Delay(50);

return1;

}

else

{

return0;

}

}

//----------------------------------------------------读NRF905接收数据------------------------------------------------------------

voidRxPacket(void)

{

uchari;

Delay(1);

// TRX_CE=0; //SetnRF905instandbymode

Delay(100);

TRX_CE=0;

CSN=0; //Spienableforwriteaspicommand

Delay(1);

SpiWrite(RRP);

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

{

TxRxBuf[i]=SpiRead(); //Readdataandsavetobuffer

}

CSN=1;

Delay(10);

TRX_CE=1;

}

//--------------------------------------------------------数据接收------------------------------------------------

voidRX(void)

{

SetRxMode(); //SetnRF905inRxmode

while(CheckDR()==0);

Delay(10);

RxPacket();

}

这些是子函数。只要把一些关于电机的sbit定义去掉,剩下的就是真正的子函数了。

那么,需注意的就只有nRF905Init();Config905();RX();SetTxMode();和一个TXbuf数组,把这几个用好了,程序就跳出来了。nRF905Init();Config905();收发都需要,SetTxMode();发送要,RX();接收要。就是这样了,最起码我看是这样。

热点内容
阿拉丁l2矿机功耗 发布:2024-05-19 22:32:18 浏览:197
eth最近 发布:2024-05-19 22:26:30 浏览:350
我的世界洗矿机作用 发布:2024-05-19 22:03:51 浏览:615
挖矿木马多少钱 发布:2024-05-19 21:53:36 浏览:703
区块链十大数据科技公司 发布:2024-05-19 21:08:29 浏览:664
元宇宙星际幻兽下载 发布:2024-05-19 20:52:02 浏览:203
xrp为什么总是跌 发布:2024-05-19 20:45:24 浏览:155
失落的方舟挖矿地图 发布:2024-05-19 20:41:10 浏览:887
币圈交易k图都代表什么 发布:2024-05-19 20:09:33 浏览:44
新加坡虚拟数字货币平台BCT 发布:2024-05-19 19:44:28 浏览:832