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

📄 2012_cc2500_lpm4.c

📁 // 2012 发送接收程序 // 449 CC2500获取控制数据 // 449发送控制信号 // // 2012接收 控制电机返回状态 // 449接收方接收
💻 C
字号:
//----------------------------------------------------------------------------
//  2012 发送接收程序
//  449 CC2500获取控制数据
//  449发送控制信号
//  
//  2012接收 控制电机返回状态
//  449接收方接收
//
//----------------------------------------------------------------------------

#include "include.h"

extern char paTable[];    // 外部调用 paTable[] = {0x51}
extern char paTableLen;  // 外部调用 paTableLen = 1

char txBuffer[5];
char rxBuffer[5],Speed,Stop = 8,lowpower = 8;
unsigned int i,Count = 0;
unsigned int rx_dianj9,adc_tx2 = 102;       //16 Bit
unsigned int time_con = 0 ;

void delay(int x)   // 5*x+12  nop
      {             //128- 23    256-49
      while(x--);   
      }             //192- 36    280- 54   448- 87

void main (void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
//  /***************
//  DCOCTL =                                Init   60h
  BCSCTL1 = XT2OFF+RSEL3;                   // f DCO IN 1.5MHz
  CCTL0 = CCIE;                             // CCR0 interrupt enabled 
  CCR0 = 50000;
  CCTL1 = OUTMOD_3;                         // CCR1 set/reset
  TACTL = TASSEL_2 + MC_1;                  // SMACLK, up   mode

  TI_CC_SPISetup();                         // Initialize SPI port 初始化cc2500

  TI_CC_PowerupResetCCxxxx();               // Reset CCxxxx
  writeRFSettings();                        // Write RF settings to config reg
  TI_CC_SPIWriteBurstReg(TI_CCxxx0_PATABLE, paTable, paTableLen);//Write PATABLE
  //  数据接口
  TI_CC_GDO0_PxIES |= TI_CC_GDO0_PIN + BIT0;       // Int on falling edge (end of pkt)
  TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN + ~BIT0;      // Clear flag
  TI_CC_GDO0_PxIE |= TI_CC_GDO0_PIN + BIT0;        // Enable int on end of packet
  delay(300);

  TI_CC_SPIStrobe(TI_CCxxx0_SPWD);           // Enter power down mode when CSn goes high
//  P1DIR |= 0X09;
  P1OUT |= 0X09;
  P1REN |= 0X09;

  _NOP();
   _BIS_SR(LPM4_bits + GIE);                  // Enter LPM4, enable interrupts
}

#pragma vector=PORT1_VECTOR
__interrupt void port1_ISR (void)
{

  if (P1IFG & BIT0)
  { 
      lowpower ^= 0x01; 
       if(lowpower == 9)
       {
        _BIC_SR_IRQ(LPM4_bits);                       // Exit LPM4
        TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG2,   0x0B);  // GDO2 output pin config.
        TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG0,   0x25);  // GDO0 output pin config. 
        TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG1,   0x2E);  // GDO1 output pin config.        
        TI_CC_SPIWriteReg(TI_CCxxx0_WORCTRL,  0x30); 
        TI_CC_SPIStrobe(TI_CCxxx0_SWORRST);           // Reset real time clock
        TI_CC_SPIStrobe(TI_CCxxx0_SWOR);              // Start automatic RX polling sequence (Wake-on-Radio)  3.2mA
        
            txBuffer[0] = 3;                          // Packet length
            txBuffer[1] = 0x01;                        // Packet address
            txBuffer[2]  = rx_dianj9;
            txBuffer[3]  = adc_tx2  ;
            RFSendPacket(txBuffer, 4);                 // Send value over RF
            TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN;       // Clear Flag
            
        P1IFG &= ~BIT0;                               //Clear flag 清除中断标志位
       }
      else
       {
        P1IFG &= ~BIT0; 
        TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG2,   0x2F);  // GDO2 output pin HW to 0
        TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG1,   0x2F);
        TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG0,   0x2F);
        TI_CC_SPIStrobe(TI_CCxxx0_SPWD);              // Enter power down mode when CSn goes high
        _BIS_SR(LPM4_bits + GIE);                     // Enter LPM4, enable interrupts
       }
  }
  TI_CC_SPIStrobe(TI_CCxxx0_SRX);           //15mA ~
  char len=4;                               // Len of pkt to be RXed (only addr
  RFReceivePacket(rxBuffer,&len);           // Fetch packet from CCxxxx
  rx_dianj9 = 0;
  Speed = rxBuffer[1];
  rx_dianj9 = rxBuffer[2];
 // TI_CC_SPIStrobe(TI_CCxxx0_SWOR); 
  switch(rx_dianj9)
  {    case 80:   // 暂停---》开始
               Stop ^= 0x01;
               if(Stop == 8)
               CCTL1 = OUTMOD_3;                         // CCR1 set/reset  mode
//               TACTL = TASSEL_2 + ID_1 + MC_1;         //SMCLK/2 up
               CCTL0 = CCIE;                             // CCR0 interrupt enabled
               break ;
        case 20:  //顺时针开始
               
               P1SEL &=~0x04;                            // P1.2 TA option  unable
               P1DIR &=~0x04;                            // P1.2 TA option  unable
               P2IE  = 0X00;                             // P2.6 interruput unable 
               P2DIR |= 0x40;                            // P2.6 output 
               P2SEL = 0x40;                             // P2.6 TA option   
               CCR1 = 49900-100*Speed;
               TACTL = TASSEL_2 + ID_1 + MC_1;    //SMCLK/2 Start
               CCTL0 = CCIE;                             // CCR0 interrupt enabled
               adc_tx2 = Speed ;       //3顺时针完成
               Count = 1;                                // 
               break;
        case 40:   //逆时针开始
      
               P2SEL &=~0x40;                            // P2.6 TA option  unable
               P2DIR = 0x00;                             // P2.6 input
               P1IE  &= ~0X04;                           // P1.2 interruput unable 
               P1DIR |= 0x04;                            // P1.2 output  
               P1SEL |= 0x04;                            // P1.2 TA option  
               CCR1 = 49900-100*Speed;
               TACTL = TASSEL_2 +ID_1 + MC_1;     //SMCLK/2 Start
               CCTL0 = CCIE;                             // CCR0 interrupt enabled
               adc_tx2 = Speed;      //5逆时针完成
               Count = 1;                                // 
               break;
        case 10:    //未用****
               Stop ^= 0x01;
               if(Stop == 8)
               CCTL1 = OUTMOD_3;                         // CCR1 set/reset  mode
               TACTL = TASSEL_2 + ID_1 + MC_1;                    //SMCLK/2 up
               CCTL0 = CCIE;                             // CCR0 interrupt enabled
               break ;
        default :
               TACTL = TASSEL_2 + ID_1 + MC_0;            //SMCLK/2  Stop
               P2SEL &=~0x40;                             // P2.6 TA option  unable
               P1SEL &=~0x04;                             // P1.2 TA option  unable
               P2DIR = 0x00;                              // P2.6 input
               P1DIR &=~0x04;                             // P1.2 TA option  unable
  }
//  P1OUT = 0X01;
//  P1DIR |= 0x01; 
 TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN;                     // Clear flag
}

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
          time_con ++; 
          if(Stop == 9)
           {
               CCTL1 = OUTMOD_5;                         // CCR1 reset mode
               TACTL = TASSEL_2 + ID_1 + MC_0;                    //SMCLK/2 Stop
               CCTL0 &= ~CCIE;                           // CCR0 interrupt unabled
            }
          
          if(time_con >= Count)
          {
            if(time_con ==1)
            CCTL0 &= ~CCIE;                            // CCR0 interrupt unabled
            time_con = 0;
            /********
            txBuffer[0] = 3;                           // Packet length
            txBuffer[1] = 0x01;                        // Packet address
            txBuffer[2]  = rx_dianj9;
            txBuffer[3]  = adc_tx2  ;
            RFSendPacket(txBuffer, 4);                 // Send value over RF
            TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN;       // Clear Flag
            ***********************/
           }
}

⌨️ 快捷键说明

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