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

📄 1.txt

📁 采用TI MSP430进行GSM通信开发的实例程序
💻 TXT
📖 第 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++;   

⌨️ 快捷键说明

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