📄 main.c
字号:
/******************************************************************
CC1100:433MHZ
MCU: msp430f2012
crystal:DCO
Date : 2007-11-15
Author:xiaotanlan
******************************************************************/
#include "main.h"
static unsigned char paTable_CC1100[] = {0xc0, 0xc8, 0x84, 0x51, 0x3f, 0x34, 0x1c, 0x6c }; //CC1100发射功率表
unsigned char txBuffer_CCxx00[0x05] = {0x02, 1, 1,1,0x01}; //发射缓冲
//LENGTH,KEYCODE,FLAG,DATA0,DATA1.....
unsigned char rxBuffer_CCxx00[0x04]; //接收缓冲
unsigned char systemerr=0;
unsigned char dpynum=0;
/******************************************************************
初始化各端口方向及初值
******************************************************************/
void init_msp430f2012(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR &= ~(P_GDO0+P_GDO2+P_SO+KEY_PRESS); //输入口线
P1DIR |= LED+P_CSn+P_SCLK+P_SI; //输出口线
P1OUT |= KEY_PRESS; //按键输入带上拉
_EINT();
Initial_timerA0();
}
void Initial_timerA0(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = 50000;
TACTL = TASSEL_2 + MC_3; // SMCLK,up and down mode,
}
/******************************************************************
******************************************************************/
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
CCR0 = 50000;
WaitRxEndtime++;
//P1OUT ^= 0X01;
}
/*****************************************************************************************
初始化cc1100,并切换到接收状态
*****************************************************************************************/
void SetupCC1100(void)
{
POWER_UP_RESET_CCxxx0();
halRfWriteRfSettings_CC1100();
halSpiWriteBurstReg(CCxxx0_PATABLE, paTable_CC1100, sizeof(paTable_CC1100));
halSpiStrobe(CCxxx0_SCAL);
Dly1mS(2);
halSpiStrobe(CCxxx0_SRX);
}
/***************************************************************
判断CC1100 是否接收到数据,如果有,将其存放至缓冲
****************************************************************/
unsigned char RxCCxx00(void)
{
unsigned char length;
length = sizeof(rxBuffer_CCxx00);
if (halRfReceivePacket(rxBuffer_CCxx00, length))
{
return 1;
}
else
return 0;
}
/******************************************************************
TX OPTION CC1100发射数据
******************************************************************/
void TxCC1100()
{
unsigned char i;
halSpiWriteReg(CCxxx0_FREND0, 0x10);//CC1100:POWER=10dbm
for(i=0;i<4;i++)
{
//LED_ON();//*
Dly1mS(30);
halRfSendPacket(txBuffer_CCxx00, (txBuffer_CCxx00[0]+1));
}
halSpiWriteReg(CCxxx0_FREND0, 0x15);//CC1100太近会收不到,将发射功率降低到-10DBM,再发一次
Dly1mS(10);
halRfSendPacket(txBuffer_CCxx00, (txBuffer_CCxx00[0]+1));
//LED_OFF();//*
}
/******************************************************************
data receive CC1100接收数据
******************************************************************/
void RXCC1100(void)
{
unsigned char j;
if(RxCCxx00()) //是否收到数据?
{
dpynum = rxBuffer_CCxx00[0]; //dpynum为从对方接收的需要用LED灯显示的数据.
LED_ON();
if(rxBuffer_CCxx00[1]==0x01) //是对方发来的信息
{
//则返回收到的信息
for(j=0;j<PacketLength;j++) //save
{
txBuffer_CCxx00[j+1]=rxBuffer_CCxx00[j];
}
txBuffer_CCxx00[2]=0x07; //SLAVE FLAG 将接收到的数据回传给对方
txBuffer_CCxx00[0]=PacketLength;
halSpiStrobe(CCxxx0_SIDLE);
Dly1mS(500);
TxCC1100(); //回传数据给对方
}
else //是由对方返回的信息
if(rxBuffer_CCxx00[1]==0x07) Dly1mS(150);
LED_OFF();
}
}
/******************************************************************
main program 主程序
******************************************************************/
void main()
{
unsigned char temp;
init_msp430f2012(); //mcu initializtion
//LED_ON();
do
{ //check system if OK
//SetupSPI(); //setup mcu spi for initialize RF module
SetupCC1100();
}while(systemerr);
LED_ON();
Dly1mS(10); //delay ? ms
LED_OFF();
while(1)
{
if((P1IN & KEY_PRESS)==0) //判断是否有键按下
{
txBuffer_CCxx00[1]=8;
LED_ON(); //led on
//Dly1mS(50);
txBuffer_CCxx00[2]=0x01; //MAIN FALG
TxCC1100(); //发射信息
LED_OFF(); //send end, led off
}
else
{
RXCC1100();
temp=dpynum;
while (temp)
{
temp--;
Dly1mS(100);
LED_ON();
Dly1mS(100);
LED_OFF();
}
dpynum=0;
}
}
}
//=================================================================
// END
//=================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -