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

📄 demo.c

📁 基于MSP430单片机的
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <msp430x13x.h>

//定义发送接收和控制线
#define  TX  BIT4
#define  RX  BIT5
#define  IGT BIT6
#define  PD  BIT7
#define  VDD BIT5
#define  ON_OFF BIT6

//定义地址状态口
#define state0 1
#define state1 1<<1
#define state2 1<<2
#define state3 1<<3

//定义各个模块的地址
#define simems_gprs  state0
#define simems_gprs_900  0x0f
#define anydata_cdma state1
#define ZTE_module 0x0e

//定义各个LED脚
#define LED1G   0x01
#define LED1R   0x02
#define LED2G   0x04
#define LED2R   0x08
#define LED3G   0x10
#define LED3R   0x20
#define LED4G   0x40
#define LED4R   0x80
#define LED5G   0x01
#define LED5R   0x02
#define LED6G   0x04
#define LED6R   0x08
#define LED7G   0x10
#define LED7R   0x20
#define LED8G   0x40
#define LED8R   0x80

static unsigned char flag = 0;                                       //标志用于延时
static unsigned char j=0;                                            //接收数据的下标
static unsigned char RCV_Byte[100];                                  //用于接收AT指令返回
static unsigned char Module_Address;                                 //模块地址
static unsigned char Check_Flag[8] = {1,1,1,1,2,1,1,1};              //8个LED灯的亮闪标志,由于GPRS模块的LED5控制两条指令,故标志定义为2
static unsigned char Count = 0;                                      //用于修改波特率的计数

struct Led_Bit
{
  unsigned led1:1;
  unsigned led2:1;
  unsigned led3:1;
  unsigned led4:1;
  unsigned led5:1;
  unsigned led6:1;
  unsigned led7:1;
  unsigned led8:1;
}Flag_User;


//检查硬件是否连通
const unsigned char Cmd0[] = "AT\r" ;

//定义SIMEMS GPRS指令
const unsigned char Simems_Gprs_Cmd1[] = "AT+CSQ\r" ;                           //检查信号强度
const unsigned char Simems_Gprs_Cmd2[] = "AT+IPR=0;&W\r" ;                      //设置波特率
const unsigned char Simems_Gprs_Cmd3[] = {'A','T','+','C','G','D','C','O','N','T','=','1',',','"','I','P','"',',','"','c','s','w','s','.','h','n','"','\r'};     //定义PDP上下文
const unsigned char Simems_Gprs_Cmd4[] = "AT+CGATT=1\r";                        //附着GPRS网络
const unsigned char Simems_Gprs_Cmd5[] = "AT+CGATT?\r";                         //查询是否附着成功
const unsigned char Simems_Gprs_Cmd6[] = "AT+CGACT=1,1\r" ;                     //激活PDP上下文
const unsigned char Simems_Gprs_Cmd7[] = "AT+CGPADDR=1\r" ;                     //查看IP地址
const unsigned char Simems_Gprs_Cmd8[] = "AT^SMSO\r" ;                          //软件关闭GPRS模块
const unsigned char Simems_Gprs_Cmd_Netlignt[] = "AT^SSYNC=1\r";                  //点亮网络灯

//定义ANYDATA CDMA指令
const unsigned char Anydata_Cdma_Cmd1[] = "AT+IPR=38400\r" ;                   //设置波特率
const unsigned char Anydata_Cdma_Cmd2[] = "AT+RLOCK?\r" ;                      //查询RUIM状态
const unsigned char Anydata_Cdma_Cmd3[] = "AT+CSQ?\r" ;                        //检查信号强度
const unsigned char Anydata_Cdma_Cmd4[] = "ATE0\r" ;                           //关闭回显
const unsigned char Anydata_Cdma_Cmd5[] = "AT&W\r" ;                           //保存设置参数
const unsigned char Anydata_Cdma_Cmd6[] = "AT+GMR\r" ;                         //查看版本软件

//定义ZTE MODULE指令
const unsigned char ZTE_Module_Cmd_Baud[] = "AT+ZPR=38400&w\r";
const unsigned char ZTE_Module_Cmd1[] = "AT+CSQ\r" ;                           //检查信号强度
const unsigned char ZTE_Module_Cmd2[] = "AT+ZVERS\r" ;                          //查讯版本号
const unsigned char ZTE_Module_Cmd3[] = {'A','T','+','C','G','D','C','O','N','T','=','1',',','"','I','P','"',',','"','c','s','w','s','.','h','n','"','\r'};     //定义PDP上下文
const unsigned char ZTE_Module_Cmd4[] = "AT+CGATT=1\r";                        //附着GPRS网络
const unsigned char ZTE_Module_Cmd5[] = "AT+CGATT?\r";                         //查询是否附着成功
const unsigned char ZTE_Module_Cmd6[] = "AT+CGACT=1,1\r" ;                     //激活PDP上下文
const unsigned char ZTE_Module_Cmd7[] = "AT+CGPADDR=1\r" ;                     //查看IP地址
const unsigned char ZTE_Module_Cmd8[] = "AT+ZPWROFF\r" ;                       //软件关闭GPRS模块




//LED1-LED4亮绿灯
void LED1_4_Green (unsigned char A)
{

  P4OUT &=~ (A<<1);
  P4OUT |= A;

}

//LED1-LED4亮红灯
void LED1_4_Red  (unsigned char B)
{

  P4OUT &=~ (B>>1);
  P4OUT |= B;

}

//LED5-LED8亮绿灯
void LED5_8_Green (unsigned char F)
{

  P5OUT &=~ (F<<1);
  P5OUT |= F;

}

//LED5-LED8亮红灯
void LED5_8_Red (unsigned char D)
{

  P5OUT &=~ (D>>1);
  P5OUT |= D;

}

//发送指令函数
void Send_Cmd(const unsigned char *s)
{

  while(*s != '\r')
  {
    TXBUF0 = *s;
    while((UTCTL0&0x01)==0x00);
    s++;
  }
  TXBUF0 = '\r';
  while((UTCTL0&0x01)==0x00);

}

//使用6M晶震
void XT_Init(void)
{

  BCSCTL1 |= XT2OFF;                           //使用XT2
  BCSCTL2 |= SELM1+SELS;                       //

}

//USART0初始化
void Uart0_Init(void)
{

  U0CTL &=~ SWRST;
  U0CTL = 0X00;
  U0CTL += CHAR;
  U0TCTL = 0X00;
  U0TCTL = SSEL0+SSEL1;
  UBR00 = 0X20;                                  //波特率为115200
  UBR10 = 0X00;
  UMCTL0 = 0X00;
  ME1 |= UTXE0 + URXE0;
  IE1 |= URXIE0;
  P3SEL |= TX + RX;
  P3DIR |= TX;

}

//定时器A初始化
void TimerA_Init(void)
{

  TACTL = TASSEL0 + TACLR;

}

//清除接受到的数据
void Clear_Rcv(void)
{
   for(j = 100; j > 0 ; j--)
     RCV_Byte[j-1] = 0;
}


//精确延时
void Delay(unsigned int Num)
{

  CCTL0 |= CCIE;
  CCR0 = Num;
  TACTL |= MC0;
  flag = 0;

}

//普通延时
void Delay1(unsigned int i)
{

  unsigned int j;
  for(j = i ; j > 0 ; j--);

}

//发送指令返回正确
void Rcv_T (unsigned char M1)
{

  switch(M1)
  {
    case 1:
      {
        LED1_4_Green(LED1G);
        Check_Flag[0] = 0;
        break;
      }

    case 2:
      {
        LED1_4_Green(LED2G);
        Check_Flag[1] = 0;
        break;
      }

    case 3:
      {
        LED1_4_Green(LED3G);
        Check_Flag[2] = 0;
        break;
      }

    case 4:
      {
        LED1_4_Green(LED4G);
        Check_Flag[3] = 0;
        break;
      }

    case 5:
      {
        LED5_8_Green(LED5G);
        Check_Flag[4]--;
        break;
      }

    case 6:
      {
        LED5_8_Green(LED6G);
        Check_Flag[5] = 0;
        break;
      }

    case 7:
      {
        LED5_8_Green(LED7G);
        Check_Flag[6] = 0;
        break;
      }

    case 8:
      {
        LED5_8_Green(LED8G);
        Check_Flag[7] = 0;
        break;
      }

    default:break;
  }

}

//发送指令返回错误
void Rcv_F(unsigned char M2)
{

  switch(M2)
  {
    case 1: LED1_4_Red(LED1R);break;

    case 2: LED1_4_Red(LED2R);break;

    case 3: LED1_4_Red(LED3R);break;

    case 4: LED1_4_Red(LED4R);break;

    case 5:
      {
        LED5_8_Red(LED5R);
        Check_Flag[4] = 2;
        break;
      }

    case 6: LED5_8_Red(LED6R);break;

    case 7: LED5_8_Red(LED7R);break;

    case 8: LED5_8_Red(LED8R);break;

    default:break;
  }

}

//是否返回OK
void Check_Return_OK(unsigned char N1)
{

  for(j=0; j<100; j++)
  {
    if((RCV_Byte[j]=='O')&&(RCV_Byte[j+1]=='K'))
    {
      Rcv_T(N1);
      break;
    }
  else if(j == 99)
    Rcv_F(N1);
  }

}

//是否返回15-31强度的信号
void Check_Return_CSQ(unsigned char N1)
{

  for(j=0; j<100; j++)
  {
    if((RCV_Byte[j]>='1')&&(RCV_Byte[j]<='3'))
    {
      if((RCV_Byte[j]=='1')&&(RCV_Byte[j+1]>='5')&&(RCV_Byte[j+1]<='9'))
      {
        Rcv_T(N1);
        break;
      }
      else if((RCV_Byte[j]=='2')&&(RCV_Byte[j+1]>='0')&&(RCV_Byte[j+1]<='9'))
      {
        Rcv_T(N1);
        break;
      }
      else if((RCV_Byte[j]=='3')&&(RCV_Byte[j+1]>='0')&&(RCV_Byte[j+1]<='1'))
      {
        Rcv_T(N1);
        break;
      }
    }

  else if(j == 99)
    Rcv_F(N1);
  }

}

//是否附着GPRS网络成功
void Check_Return_1(unsigned char N1)
{

  for(j=0; j<100; j++)
  {
    if(RCV_Byte[j]=='1')
    {
      Rcv_T(N1);
      break;
    }
  else if(j == 99)
    Rcv_F(N1);
  }

}

//查看ANYDATA CDMA软件版本
void Check_Return_GMR(unsigned char N1)
{

  for(j=0; j<100; j++)
  {

    if(RCV_Byte[j] >= '0')
    {
      if (RCV_Byte[j]=='0')
      {
       if( (RCV_Byte[j+1] >= '6') && (RCV_Byte[j+1] <= '9'))
       {
         Rcv_T(N1);
         break;
       }
      }

      else if (RCV_Byte[j] > '0')
      {
       if( (RCV_Byte[j+1] >= '0') && (RCV_Byte[j+1] <= '9'))
       {
         Rcv_T(N1);
         break;
       }
      }
    }

    else if(j == 99)
       Rcv_F(N1);
   }

}

//查看ZTE MODULE软件版本
void Check_Return_ZVERS(unsigned char N1)
{

  for(j=0; j<100; j++)
  {

    if(RCV_Byte[j] == '1')
    {
      if(RCV_Byte[j+1]=='0')
      {
       if((RCV_Byte[j+2] == '8') || (RCV_Byte[j+2] == '9'))
       {
         Rcv_T(N1);
         break;
       }
      }

      else if((RCV_Byte[j+1] >= '1')&& (RCV_Byte[j+1] <= '9'))
      {
       if( (RCV_Byte[j+2] >= '0') && (RCV_Byte[j+2] <= '9'))
       {
         Rcv_T(N1);
         break;
       }
      }
    }

    else if(j == 99)
       Rcv_F(N1);
   }

}


//启动ANYDATA CDMA模块
void CDMA_ANYDATA_IGT(void)
{

  P1DIR |= VDD;
  P1OUT |= VDD;

  Delay(32768);
  while(flag == 0);

  Delay(32768);
  while(flag == 0);

  while(Check_Flag[0] == 1)
  {
    Send_Cmd(Cmd0);
    Delay(8192);
    while(flag == 0);
    Check_Return_OK(1);
    Clear_Rcv();
    Count++;
    if(Count == 15)
    {

⌨️ 快捷键说明

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