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;