?? main.c
字號:
/**************************************************************************************************/
#include "msp430x22x4.h"
#include "hardware.h"
#include "cc2500.h"
#include "timer.h"
#include "uart.h"
#include "spi.h"
/**************************************************************************************************/
/* 變量定義 */
/**************************************************************************************************/
extern unsigned char paTable[];
extern unsigned char paTableLen;
unsigned char txBuffer[4],rxBuffer[4];
unsigned char uartbuf[3]="#";
/******閱讀器數(shù)據(jù)數(shù)據(jù)格式定義******/
extern unsigned char Connected =0; //是否已經(jīng)建立連接
extern unsigned char ReActive = 0; //是否重新激活標(biāo)簽
const unsigned char Active = 0xA5; //激活命令
const unsigned char Query = 0xAA; //詢問命令
const unsigned char Kill = 0x5A; //滅活命令
const unsigned char AckQuery = 0x55; //詢問回復(fù)
const unsigned char AckKill = 0xEF; //沒活回復(fù)
const unsigned char ActiveChannel = 64; //激活信道
const unsigned char KillChannel = 64; //滅活信道
const unsigned char LenActive = 1; //長度:激活命令
const unsigned char LenQuery = 1; //長度:詢問命令
const unsigned char LenKill = 3; //長度:滅活命令+標(biāo)簽號碼
const unsigned char LenAckQuery =3; //長度:詢問回復(fù)+標(biāo)簽號碼
const unsigned char LenAckKill =3; //長度:沒活回復(fù)+標(biāo)簽號碼
void delay(unsigned int);
/**************************************************************************************************
**函數(shù)名稱:void main (void)
**入口參數(shù):無
**出口參數(shù):無
**功能描述:主循環(huán)函數(shù)
**************************************************************************************************/
void main (void)
{
unsigned char i;
unsigned char len=4;
unsigned char n=0;
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer to prevent time out reset
BCSCTL1 = CALBC1_8MHZ; // 設(shè)置 DCO 為8MHz
DCOCTL = CALDCO_8MHZ;
IFG1 &= ~OFIFG; // 清除晶振失效標(biāo)志
P1DIR |= 0x71; // GDO2,,CS,SI,CLK,SO,GDO0,LED
TI_CC_SPISetup(); // 初始化 SPI 接口
TI_CC_PowerupResetCCxxxx(); // 復(fù)位 CC2500
writeRFSettings(); // 寫配置寄存器
TI_CC_SPIWriteBurstReg(TI_CCxxx0_PATABLE, paTable, paTableLen);
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
InitWDTTimer();
InitUart();
_EINT();
LED_OFF;
while(!Connected);//等待建立連接
while(1)
{
while(!ReActive)//循環(huán)查詢所有信道,收到重新激活命令將退出該循環(huán)
{
SwitchChannel(n);//切換信道
txBuffer[0] = LenQuery;
txBuffer[1] = Query;
RFSendPacket(txBuffer,(LenQuery+1));//查詢該信道是否有標(biāo)簽
if (RFReceivePacket(&rxBuffer[0],&len))
{
if(rxBuffer[0] == AckQuery)//收到標(biāo)簽信息?
{
LED_ON;
txBuffer[0] = LenKill;
txBuffer[1] = Kill;
txBuffer[2] = rxBuffer[1];
txBuffer[3] = rxBuffer[2];
RFSendPacket(txBuffer,(LenKill+1));//滅活該標(biāo)簽
if (RFReceivePacket(&rxBuffer[0],&len))
{
if(rxBuffer[0] == AckKill)//收到標(biāo)簽信息?
{
if((rxBuffer[1] == txBuffer[2]) && (rxBuffer[2] == txBuffer[3]));
{
uartbuf[1] = rxBuffer[1];
uartbuf[2] = rxBuffer[2];
SendUart(uartbuf,3);
LED_OFF;
}
}
}
}
}
n++;
if(n>=64)//64個信道掃描完畢?
{ n=0;
}
}//end of while(!ReActive)
SwitchChannel(ActiveChannel);//切換到激活信道
txBuffer[0] = LenActive;
txBuffer[1] = Active;
for(i=0;i<3;i++)
RFSendPacket(txBuffer,(LenActive+1));//此時工作在激活信道激活所有標(biāo)簽
ReActive = 0; //關(guān)閉重新激活標(biāo)志,該標(biāo)志將在串口中斷收到相應(yīng)的命令后置位
}//end of while(1)
}
void delay(unsigned int i)
{
unsigned int j,k;
for(j=0;j<i;j++)
for(k=0;k<65000;k++);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -