⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 MSP430单片机的阅读器源码
💻 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]="#";

/******阅读器数据数据格式定义******/
extern unsigned char Connected =0;        //是否已经建立连接
extern unsigned char ReActive = 0;        //是否重新激活标签

const unsigned char Active = 0xA5;        //激活命令
const unsigned char Query  = 0xAA;        //询问命令
const unsigned char Kill   = 0x5A;        //灭活命令
const unsigned char AckQuery  = 0x55;     //询问回复
const unsigned char AckKill   = 0xEF;     //没活回复
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;        //长度:灭活命令+标签号码
const unsigned char LenAckQuery =3;       //长度:询问回复+标签号码
const unsigned char LenAckKill  =3;       //长度:没活回复+标签号码

void delay(unsigned int);

/**************************************************************************************************
**函数名称:void main (void)
**入口参数:无
**出口参数:无
**功能描述:主循环函数
**************************************************************************************************/
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;                    // 设置 DCO 为8MHz
  DCOCTL  = CALDCO_8MHZ;      
  
  IFG1 &= ~OFIFG;                           // 清除晶振失效标志  
    
  P1DIR |= 0x71;                            // GDO2,,CS,SI,CLK,SO,GDO0,LED
      
  TI_CC_SPISetup();                         // 初始化 SPI 接口   
  TI_CC_PowerupResetCCxxxx();               // 复位 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)//循环查询所有信道,收到重新激活命令将退出该循环
    {   		
      SwitchChannel(n);//切换信道      
      txBuffer[0] = LenQuery; 
      txBuffer[1] = Query;
      
      RFSendPacket(txBuffer,(LenQuery+1));//查询该信道是否有标签
    
      if (RFReceivePacket(&rxBuffer[0],&len))
      {
        if(rxBuffer[0] == AckQuery)//收到标签信息?
        {
          LED_ON;                  
          txBuffer[0] = LenKill; 
          txBuffer[1] = Kill;
          txBuffer[2] = rxBuffer[1]; 
          txBuffer[3] = rxBuffer[2];
          RFSendPacket(txBuffer,(LenKill+1));//灭活该标签 
          
          if (RFReceivePacket(&rxBuffer[0],&len))
          {
            if(rxBuffer[0] == AckKill)//收到标签信息?
            {
              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));//此时工作在激活信道激活所有标签
    ReActive = 0;                        //关闭重新激活标志,该标志将在串口中断收到相应的命令后置位
  }//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++);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -