微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于430单片机的NRF905收发驱动程序

基于430单片机的NRF905收发驱动程序

时间:11-27 来源:互联网 点击:

TX_EN_0; //TX_EN = 0;

CE905_0; //ce905=0

SpiWriteByte(WRC);

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

{

SpiWriteByte(Nrf9e5Config[i]);

}

// while ((IFG1 & UTXIFG0)==0x0);

CE905_1;//CE_905 = 1

}

void TransmitBytes(void)

{

INT8U i;

TX_EN_1; //TX_EN=1

TRX_CE_0; //TRX_CE = 0

delay(1000);

CE905_0; //ce905=0

SpiWriteByte(WTA);

SpiWriteByte(0xE7);

SpiWriteByte(0xE7);

SpiWriteByte(0xE7);

SpiWriteByte(0xE7);

// while ((IFG1 & UTXIFG0)==0x0);

CE905_1; //CE_905 = 1

delay(1);

CE905_0; //ce905=0

SpiWriteByte(WTP);

for(i=0; i

{

SpiWriteByte(RFTxBuf[i]);

}

// while ((IFG1 & UTXIFG0)==0x0);

CE905_1; //CE_905 = 1

delay(1);

TRX_CE_1; //TRX_CE=1

CntTmp = 0;

while(DR905 == 0)//; //DR=0

{

CntTmp ++;

}

TRX_CE_0; //TRX_CE = 0

TX_EN_0; //TX_EN=0

}

INT8U Recepacket(void)

{

INT8U i;

TX_EN_0; //TX_EN=0

TRX_CE_1; //TRX_CE=1

while(CD905 == 0);

TRX_CE_0; //TRX_CE=0

CE905_0; //ce905=0

SpiWriteByte(RRP);

for(i=0; i

{

RFRxBuf[i] = SpiReadByte(); //接收数据

}

while(DR905) //DR=1

{

SpiReadByte();

}

CE905_1; //ce905=1

return 1;

}

void ChangeMode(U8 mode)

{

switch(mode)

{

case PowerDown:

PD905; /// 配置为掉电模式 ///

TX_EN_0;

TRX_CE_0;

break;

case Standby:

TRX_CE_0;

TX_EN_0;

PU905;

break;

case RXMode:

PU905;

// delay(2);

TX_EN_0;

_NOP();

_NOP();

TRX_CE_1;

break;

case TXMode:

TX_EN_1;

PU905;

TRX_CE_0;

break;

case TXData:

TRX_CE_1;

delay(2);

TRX_CE_0; /// ?? Make a 20us Pulse as nRF905 Datasheet ///

break;

}

}

void RF905_Read(U8 RFcmd,U8 //RFdata)

{

U8 i,len;

switch(RFcmd)

{

case RTA: len=4; break;

case RRC: len=16; break;

case RTP:

case RRP: len=RFRxLen; break;

default: len=0;

}

CE905_0; /// Spi enable for write a spi command ///

SpiWriteByte(RFcmd);

for(i=0;i

CE905_1;

}

void RF905_Write(U8 RFcmd,U8 //RFdata)

{

U8 i,len;

switch(RFcmd)

{

case WTA: len = 4; break;

case WRC: len = 16; break;

case WTP: len = RFRxLen; break;

default: len = 0;

}

CE905_0; /// Spi enable for write a spi command ///

SpiWriteByte(RFcmd);

for(i=0;i/// len Bytes Data ///

CE905_1; // Disable Spi

}

U32 msec_cont = 0;//10毫秒钟基数

U8 msec=0;//10毫秒钟

U8 sec=0;//秒钟

U8 min=0;//分钟

U8 old_min;

U8 K1DwCnt, K2DwCnt;

// Timer A0 interrupt service routine

#pragma vector=TIMERA0_VECTOR

__interrupt void Timer_A (void)

{

_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)

msec ++;

msec_cont ++;

if(KEY1)

{

if((++K1DwCnt) > KeyDwTimes){K1DwCnt = KeyDwTimes;}

}

else

{

if(K1DwCnt >= 3)

K1DwCnt -= 3;

else

K1DwCnt = 0;

}

if(KEY2)

{

if((++K2DwCnt) > KeyDwTimes){K2DwCnt = KeyDwTimes;}

}

else

{

if(K2DwCnt >= 3)

K2DwCnt -= 3;

else

K2DwCnt = 0;

}

if((msec == 100) | (msec == 50))

{ //100分频,就是1秒一次

if(msec == 100) msec = 0;

sec ++;

///

if(Blink)

{//需要闪烁

BlkPtr = 1;

for(LLi = 0; LLi 4; LLi ++)

{

if((sec & 0x01) && (Blink & BlkPtr))

LLTmp = 0xFF;

else

LLTmp = DisBuff[LLi];

BlkPtr <= 1;

for(LLj = 0; LLj 8; LLj ++)

{

if(LLTmp & 0x80)

{

LCD_DI_1;

}

else

{

LCD_DI_0;

}

LCD_CLK_1;

LCD_CLK_0;

LLTmp <= 1;

}

}

}

///

if(sec==60)

{

sec=0;//每分钟一次

min++;

if(min==60) min=0;

}

}

}

U8 K1Sta = WaitKeyDw;

U8 K2Sta = WaitKeyDw;

void main(void)

{

//INT8U i, tmp;

// Init_CLK();

WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗

_DINT();//关闭中断

PORT_Init();

PD905;

SPI_Init();

INIT_905();

//P1OUT ^= 0x01; // 点亮LED

RF905_Read(RRC,RFRxBuf);

RFTxBuf[0] = a;

RFTxBuf[1] = b;

RFTxBuf[2] = c;

RFTxBuf[3] = d;

RFTxBuf[4] = e;

RFTxBuf[5] = f;

RFTxBuf[6] = g;

RFTxBuf[7] = h;

RFTxBuf[8] = i;

RFTxBuf[9] = ;

BCSCTL1 |= divA0 + divA1; // ACLK = 32768/8

//用Timer 定时5分钟

TACTL &= ~(MC1 + MC0 + ID0 + ID1); //Stop TA, 不分频

TACTL = TASSEL0 + TACLR; // ACLK, clear TAR

CCTL0 = CCIE; // CCR0 interrupt enabled

CCR0 = 41; // ≈10ms

TACTL |= MC0; // Start Timer_a in upmode to CCR0

LED3_ON;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top