📄 main.c
字号:
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
RFSendPacket(txBuffer1, 9); // Send value over RF
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
RFSendPacket(txBuffer1, 9); // Send value over RF
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
j = 1;
}
/*TI_CC_SPIStrobe(TI_CCxxx0_SFRX);//不能和RFReceivePacket()分得太远
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
TI_CC_SPIStrobe(TI_CCxxx0_SRX);//后面的延时比较难调*/
TI_CC_Wait(30000); //要调的延时
TI_CC_Wait(30000);
_BIS_SR(LPM3_bits + GIE);
#endif
#ifdef _SWOR
// if (RFReceivePacket(rxBuffer,&len1)) // Fetch packet from CCxxxx
// j++;//;
// TI_CC_Wait(30000); //要调的延时
//TI_CC_Wait(30000); //要调的延时
//TI_CC_Wait(30000); //要调的延时
_BIS_SR(LPM3_bits + GIE);
#endif
#ifdef receive
switch(com)
{
case 01://返回一组温度值
txBuffer2[0] = 24;
txBuffer2[1] = 1;
txBuffer2[2] = 2;
txBuffer2[3] = 0xf1; //返回一组温度
for(x=4;x<24;x++)
{
txBuffer2[x] = tem_buffer[x-4]; //存数据到发送缓冲
}
RFSendPacket(txBuffer2, 24);
com = 0;
break;
case 02: // 读一次温度值
DS18B20_OUT |= DS18B20;
delay(60000) ;
Ds18b20_Convert_commond();
if(tempera > pre_tem)
{
txBuffer1[2] = 0xf3;//返回预警温度值命令
txBuffer1[3] = tempera;
RFSendPacket(txBuffer1, 9);
}
tem_buffer[tem_flag] = tempera;
tem_flag--;
if(tem_flag == 0)
{
tem_flag = 19;
txBuffer2[0] = 24;
txBuffer2[1] = 1;
txBuffer2[2] = 2;
txBuffer2[3] = 0xf1; //返回一组温度
for(x=4;x<24;x++)
{
txBuffer2[x] = tem_buffer[x-4]; //存数据到发送缓冲
}
RFSendPacket(txBuffer2, 24);
}
TI_CC_SPIStrobe(TI_CCxxx0_SFRX);//不能和RFReceivePacket()分得太远???
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); //???
TI_CC_SPIStrobe(TI_CCxxx0_SRX);//后面的延时比较难调???
com = 0;
break;
case 05://设置预警温度
pre_tem = rxBuffer[4];
com = 0;
break;
case 06://采集温度间隔
n = rxBuffer[4];
m=n;
com = 0;
break;
default:
break;
}
_BIS_SR(LPM3_bits + GIE);
#endif
}
}
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
CCR0 = 50000;
TACTL &= ~TAIFG;//复位ta
m--;
if(m==0)
{
ss++;
m=n;
if(ss == 1200)//ss = 1;
{
DS18B20_OUT |= DS18B20;
delay(60000) ;
Ds18b20_Convert_commond();
// com = 02; //采集温度命令
ss = 0;
_BIC_SR_IRQ(LPM3_bits);
}
}
}
//#ifdef _RECEIVER
#pragma vector=PORT1_VECTOR
__interrupt void port1_ISR (void)
{
TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; // Clear flag 在这里才能在调试状态下不断进入中断
// disEnable interrupts
char len;
next++; // stripped away within RX function)
#ifdef _SWOR
CCxxx0ExitWorMode();
//TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
#endif
// TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; // Clear flag 在这里才能在调试状态下不断进入中断
RFReceivePacket(rxBuffer,&len) ; // Fetch packet from CCxxxx
// Toggle LEDs according to pkt data
TI_CC_SPIStrobe(TI_CCxxx0_SFRX);//不能和RFReceivePacket()分得太远???
TI_CC_SPIStrobe(TI_CCxxx0_SRX);//后面的延时比较难调???
com = rxBuffer[3];
_BIC_SR_IRQ(LPM3_bits);
////////////////////////////////////////////
/* DS18B20_OUT |= DS18B20;
delay(60000) ;
Ds18b20_Convert_commond();
txBuffer1[2]= tempera;*/
//////////////////////////////////////////
//TI_CC_SPIStrobe(TI_CCxxx0_SFRX);//不能和RFReceivePacket()分得太远???
//TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); //???
//TI_CC_SPIStrobe(TI_CCxxx0_SRX);//后面的延时比较难调???
/* TI_CC_Wait(30000); //要调的延时
TI_CC_Wait(30000); //要调的延时
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);*/
#ifdef _SWOR
//TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
RFSendPacket(txBuffer1, 9);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
//TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
RFSendPacket(txBuffer1, 9);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
//TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
RFSendPacket(txBuffer1, 9);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
//TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
RFSendPacket(txBuffer1, 9);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; // Clear flag 在这里才能在调试状态下不断进入中断
CCxxx0EnWorMode();
#endif
//_BIC_SR_IRQ(LPM3_bits);
//_DINT();
}
void CCxxx0EnWorMode(void)
{
// Set Event0 timeout = 300 ms (RX polling interval)
// WOR_RES = 0
// T_event0 = 750 / f_xosc * EVENT0 * 2^(5*WOR_RES) = 300 ms // Assuming f_xosc = 27 MHz
// => EVENT0 = 10800 = 0x28A0 TI_CCxxx0_WOREVT1
TI_CC_SPIWriteReg(TI_CCxxx0_WOREVT1,0x28 ); // WOR High byte Event Timeout. 0x32
TI_CC_SPIWriteReg(TI_CCxxx0_WOREVT0, 0xa0); // WOR Low byte Event Timeout. 0xC8
// Enable automatic initial calibration of RCosc.
// Set T_event1 ~ 345 us, enough for XOSC stabilize before starting calibration.
// Enable RC oscillator before starting with WOR (or else it will not wake up).
// Not using AUTO_SYNC function.
TI_CC_SPIWriteReg(TI_CCxxx0_WORCTRL, 0x38); // WOR control 电磁波激活控制0x79
// Setting Rx_timeout < 0.5 %.
// => MCSM2.RX_TIME = 101b
// => Rx_timeout = (EVENT0 * 0.1127) = (10800 * 0.1127) = 1.172 ms, i.e. 0.391% RX duty cycle
TI_CC_SPIWriteReg(TI_CCxxx0_MCSM2,0x00); // 主通道控制状态机配置
TI_CC_SPIWriteReg(TI_CCxxx0_MCSM1,0x30); //设置读取包后进入IDLE态
//TI_CC_SPIWriteReg(TI_CCxxx0_MCSM0,0x18); //主通道控制状态机配置calibrate when going from IDLE to RX
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
TI_CC_SPIStrobe(TI_CCxxx0_SWORRST); // Initialize CCxxxx WOR Timer.
TI_CC_SPIStrobe(TI_CCxxx0_SWOR); // Start automatic RX polling sequence
}
//************************************************************************************
//Returns : None
//Parameters : None
//Purpose : void CCxxx0ExitWorMode(void)
// CC2500 退出WOR模式 要配置这些些寄存器
//功能描述:退出CCxxx0电磁波激活模式
//注意事项:None
//************************************************************************************
void CCxxx0ExitWorMode(void)
{
TI_CC_SPIWriteReg(TI_CCxxx0_MCSM2,0x07);
//RX_TIME[2:0]=111 ,无工作暂停
TI_CC_SPIWriteReg(TI_CCxxx0_MCSM1,0x30);
//CCA_MODE[5:4]=11,RXOFF_MODE[3:2]=00 , TXOFF_MODE[1:0]=00
// TI_CC_SPIWriteReg(TI_CCxxx0_MCSM0,0x18);
//Enable automatic FS calibration when going from IDLE to RX/TX/FSTXON
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -