📄 1.txt
字号:
#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 + -