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

📄 main.c

📁 8051f340实现cc1100软件SPI的正常数据收发
💻 C
字号:
/*************************************************
** 版权    :   杭州利尔达科技有限公司
** 文件名  :   1100/2500测试用
** 版本    :   v1.0
** 工作环境:   IAR4.11b
** 作者    :   panxiaojiang
** 生成日期:   2008.11
** 功能    :   基本通信功能测试
** 使用说明:   更改主程序中#if 后的值切换发送和接收,
               当为“#if 0”为接收,否则为发送;
               发送数据为变长数据包,发送60个字节,CRC校验+地址校验
               接收方收到数据后显示发送的数据个数并切换亮灯状态
** 测试硬件:  LSD-TEST430FG461X-20XX-U V1.0b
** 修改日志:   2008.11
**************************************************/
#include "include.h"

//变量声明
char paTable[8] = {0x17,0x1c,0x26,0x57,0x60,0x85,0xc8,0xc0};//cc1100对应功率值-20,-15,-10,-5,0,5,7,10
//char paTable[] = {0x97,0x6e,0x7f,0x97,0xa9,0xbb,0xfe,0xff,};//cc2500对应功率值-10,-8,-6,-4,-2,0,1
char paTableLen = 4;                                         //对应功率值,默认4则为0dbm发送

char txBuffer[60]={59,1,3,4,5,6,7,8,9,4,5,5,6,2};
char rxBuffer[5];
char delay=1;
//char* LCD = LCDMEM;

/*#define SEG_a       0x01
#define SEG_b       0x02
#define SEG_d       0x04
#define SEG_g       0x08
#define SEG_c       0x10
#define SEG_f       0x20
#define SEG_h       0x40
#define SEG_e       0x80

#define CHAR_ALL            (SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g|SEG_h)
#define CHAR_SPACE          0
#define CHAR_MINUS          (SEG_g)
#define CHAR_0              (SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f)
#define CHAR_1              (SEG_b|SEG_c)
#define CHAR_2              (SEG_a|SEG_b|SEG_d|SEG_e|SEG_g)
#define CHAR_3              (SEG_a|SEG_b|SEG_c|SEG_d|SEG_g)
#define CHAR_4              (SEG_b|SEG_c|SEG_f|SEG_g)
#define CHAR_5              (SEG_a|SEG_c|SEG_d|SEG_f|SEG_g)
#define CHAR_6              (SEG_a|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g)
#define CHAR_7              (SEG_a|SEG_b|SEG_c)
#define CHAR_8              (SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g)
#define CHAR_9              (SEG_a|SEG_b|SEG_c|SEG_d|SEG_f|SEG_g)
#define CHAR_A              (SEG_a|SEG_b|SEG_c|SEG_e|SEG_f|SEG_g)
#define CHAR_B              (SEG_c|SEG_d|SEG_e|SEG_f|SEG_g)
#define CHAR_C              (SEG_a|SEG_d|SEG_e|SEG_f)
#define CHAR_D              (SEG_b|SEG_c|SEG_d|SEG_e|SEG_g)
#define CHAR_E              (SEG_a|SEG_d|SEG_e|SEG_f|SEG_g)
#define CHAR_F              (SEG_a|SEG_e|SEG_f|SEG_g)
#define CHAR_t              (SEG_d|SEG_e|SEG_f|SEG_g)
#define CHAR_L              (SEG_d|SEG_e|SEG_f)
#define CHAR_X              (SEG_g)
#define CHAR_SA             (SEG_d)
#define CHAR_MA             (SEG_g|SEG_a)

const char digit[15] =
{
  CHAR_0,  // "0"  
  CHAR_1,  // "1"
  CHAR_2,  // "2"
  CHAR_3,  // "3"
  CHAR_4,  // "4"
  CHAR_5,  // "5"
  CHAR_6,  // "6"
  CHAR_7,  // "7"
  CHAR_8,  // "8"
  CHAR_9,  // "9"
  CHAR_X,  // "10"
  CHAR_D,  //"11"
  CHAR_L,  // "12"
  CHAR_SA,  //"13"
  CHAR_MA  //"14"
};*/
unsigned char send_num=0;
unsigned char iii;
//函数声明
void  LCDinit(void);
void  TimerSet(void);
void  glit_light( unsigned int delay);
void delay1(unsigned int i);
void delay1(unsigned int i)
{
  unsigned int j;
 for(j=0;j<i;j++)
 {
//  _NOP();
 //_NOP();
 //_NOP();
 }


}
void  main (void)
{
    WDTCTL = WDTPW + WDTHOLD;                         // Stop WDT
    DCOCTL  = CALDCO_1MHZ;
    BCSCTL1 = CALBC1_1MHZ;
    P1OUT=0;
    TI_CC_LED_PxDIR |=TI_CC_LED1;          //LED灯设置
    TI_CC_LED_PxOUT &=~(TI_CC_LED1);   
   // LCDinit();                                        //液晶初始化 
    TI_CC_SPISetup();                                 // spi设置初始化
    TI_CC_PowerupResetCCxxxx();                       // 复位RF 
    writeRFSettings();                                // 写RF配置信息
    
    //SPI验证用于测试无线模块是否连接(工作)正常
   // txBuffer[63]= TI_CC_SPIReadReg(TI_CCxxx0_IOCFG2); //如果不等于0x06为错误
   // txBuffer[63]= TI_CC_SPIReadReg(TI_CCxxx0_IOCFG0); //如果不等于0x06为错误   
    txBuffer[3]= TI_CC_SPIReadReg(0x08);   //如果不等于0x00为错误
    //输出功率设置    
    TI_CC_SPIWriteBurstReg(TI_CCxxx0_PATABLE, &paTable[paTableLen], 1);
                                                      //配置发送功率        
 delay1(50000);
  TI_CC_GDO0_PxIES |= 0X02;       // Int on falling edge (end of pkt)
 // TI_CC_GDO0_PxIES &= ~TI_CC_GDO0_PIN;
  //address_bind=TI_CC_SPIReadReg(3);
  P1OUT=0x02;//输入上拉
  TI_CC_GDO0_PxIFG &= ~0X02;      // Clear flag
  TI_CC_GDO0_PxIE |= 0X02;        // Enable int on end of packet
  P1REN|=0X02;
   
    _EINT();
     _BIS_SR(GIE);
    txBuffer[1] = 0x01;
    while(1)
    {    
     //  WDTCTL=WDT_ARST_1000;
       TI_CC_LED_PxOUT ^=TI_CC_LED1;
       send_num++;                                   //发送数据个数累加
       TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);             //进入IDLE模式
       txBuffer[0] =6;                              // Packet length
       if(txBuffer[1] == 0x02)
       txBuffer[1] = 0x01;                           // Packet address
       else if(txBuffer[1] == 0x01)
       txBuffer[1] = 0x02;                           // Packet address
       txBuffer[3] = send_num;                       //写入当前发送数据个数
       RFSendPacket(txBuffer, 7);                   // 发送数据
              
       TimerSet();                                   //设置TimerA定时器--定时大约一秒
       TI_CC_SPIStrobe(TI_CCxxx0_SPWD);             //进入IDLE模式
   //    WDTCTL=WDT_ARST_1000;
      // TI_CC_LED_PxOUT ^=TI_CC_LED1;
       LPM3;  
       
    }    

}

void TimerSet(void)
{
    TACTL  =TASSEL_1+TACLR;
    TACCR0 =10000;
    TACCTL0 =CCIE;
    TACTL |= MC_1;
}

/*void LCDinit(void)
{
  volatile unsigned int i;   
  BTCTL = BT_fCLK2_DIV128 | BT_fCLK2_ACLK_DIV256;
                                                    // 设置基本定时器 
  for (i = 0;  i < 20;  i++)
      LCDMEM[i] = 0;
  P5SEL |= (BIT4 | BIT3 | BIT2);
  P5DIR |= (BIT4 | BIT3 | BIT2);
  LCDACTL = LCDFREQ_128 | LCD4MUX | LCDSON | LCDON;
  LCDAPCTL0 = LCDS0 | LCDS4 | LCDS8 | LCDS12 | LCDS16 | LCDS20 | LCDS24;
  LCDAPCTL1 = 0;
  LCDAVCTL0 = LCDCPEN;
  LCDAVCTL1 = 1 << 1;
}*/

#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA(void)
{
   LPM3_EXIT;
   //iii++;
}

#pragma vector=PORT1_VECTOR
__interrupt void port1_ISR (void)
{
 /* char len=64;                                     //读取最多数据个数
  if (RFReceivePacket(rxBuffer,&len))              // 读数据并判断正确与否
  {
       if((rxBuffer[1]==3)&&(rxBuffer[58]==6))     //校验接收到数据
       {
           TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);  
           TI_CC_LED_PxOUT ^=TI_CC_LED1;           //闪烁灯表示数据接收正常
             
       }
  }
  TI_CC_SPIStrobe(TI_CCxxx0_SFRX);                 //清接收缓存
  TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);                //进空闲模式
  TI_CC_Wait(800);                                 //延时
  TI_CC_SPIStrobe(TI_CCxxx0_SRX);                  //进入接收状态
  TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN;             // 清中断标示*/
  LPM3_EXIT;
      if(P1IFG&0X02)             // If int comes from rx'ed packet
  {

   delay1(5000);
   
  if((P1IN&0X02)==0)
  {
      TI_CC_LED_PxOUT ^=TI_CC_LED1;
       send_num++;                                   //发送数据个数累加
       TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);             //进入IDLE模式
       txBuffer[0] =6;                              // Packet length
       if(txBuffer[1] == 0x02)
       txBuffer[1] = 0x01;                           // Packet address
       else if(txBuffer[1] == 0x01)
       txBuffer[1] = 0x02;                           // Packet address
       txBuffer[3] = send_num;                       //写入当前发送数据个数
       RFSendPacket(txBuffer, 7);                   // 发送数据
              
     //  TimerSet();                                   //设置TimerA定时器--定时大约一秒
       TI_CC_SPIStrobe(TI_CCxxx0_SPWD);             //进入IDLE模式
    }
  }

  P1IFG &= ~0X02;     // Clr flags set by switch and GDO0
}

⌨️ 快捷键说明

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