新闻中心

EEPW首页>嵌入式系统>设计应用> 基于430单片机的NRF905收发驱动程序

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

作者: 时间:2016-11-27 来源:网络 收藏
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;
_EINT();//打开中断
///
CE905_0; //ce905=0
SpiWriteByte(RRC);
for(i=0; i
{
RFRxBuf[i] = SpiReadByte();
}
CE905_1; //CE_905 = 1
///
ChangeMode(RXMode); //////
K1Sta = K2Sta = WaitKeyDw;
while(1)
{
if(DR905)
{
RF905_Read(RRP, RFRxBuf);
switch(RFRxBuf[0])
{
case 0x01:
LED1_BLK;
break;
case 0x02:
LED2_BLK;
break;
}
}
switch(K1Sta)
{
case WaitKeyDw:
if(K1DwCnt > (KeyDwTimes -1))
{
ChangeMode(TXMode);
K1Sta = WaitKeyUp;
delay(3100);
RFTxBuf[0] = 0x01;
RF905_Write(WTP, RFTxBuf); //////
ChangeMode(TXData);
delay(650); /// ensure nRF905 have began TX ///
ChangeMode(RXMode); //////
}
break;
case WaitKeyUp:
if(K1DwCnt == 0)
K1Sta = WaitKeyDw;
break;
}
switch(K2Sta)
{
case WaitKeyDw:
if(K2DwCnt > (KeyDwTimes -1))
{
ChangeMode(TXMode);
K2Sta = WaitKeyUp;
delay(3100);
RFTxBuf[0] = 0x02;
RF905_Write(WTP, RFTxBuf); //////
ChangeMode(TXData);
delay(650); /// ensure nRF905 have began TX ///
ChangeMode(RXMode); //////
}
break;
case WaitKeyUp:
if(K2DwCnt == 0)
K2Sta = WaitKeyDw;
break;
}
// TransmitBytes(); //发送缓冲区里的数据
// LED1_ON;
// delay(20000);
// LED1_OFF;
// delay(20000);
// _NOP();
}
}

上一页 1 2 下一页

关键词:单片机NRF905收发驱

评论


相关推荐

技术专区

关闭