《gtm900-b(gsm)模块测试程序》由会员分享,可在线阅读,更多相关《gtm900-b(gsm)模块测试程序(6页珍藏版)》请在金锄头文库上搜索。
1、/*GTM900-B 工业模块模块测试程序 1 程序功能:远程控制两路继电器的吸合与断开远程控制两路开关短信控制单片机型号:STC12C5A60S2 支持双串口 晶振:11.0592M 波特率:9600bps应用软件:Keil2 或 Keil3 发布时间:2011-1210作 者:QQ790244909 */#include#include#define Buf_Max 200 /缓存长度 200#define Delay_Time 3000 /延时长度sbit jdq1 = P00; /继电器 1sbit jdq2 = P01; /继电器 2/sbit LED3 = P02; /状态指示灯
2、3/sbit LED4 = P03; /状态指示灯 4unsigned char i = 0; /定义缓存指针unsigned char Rec_BufBuf_Max; /定义缓存数组void Serial_Init(void); /声明串口初始化函数void Send_ASCII(unsigned char *b); /声明发送字符(ASCII 码)函数void Delay_ms(unsigned int time); /声明延时函数void CLR_Buf(void); /声明清除缓存内容void Send_Hex(unsigned char b); /声明发送字符(十六进制)函数bit
3、Hand(unsigned char *a); /声明判断缓存中是否含有指定的字符串函数/*主函数*/void main(void)Serial_Init(); /初始化串口CLR_Buf(); /清除缓存内容Delay_ms(60000); /延时Send_ASCII(AT); /发送联机指令 while(!Hand(OK) /判断是否握手成功,如果不成功延时一会,再发送 AT握手指令Send_ASCII(AT); /发送联机指令 Delay_ms(60000); /延时CLR_Buf(); /清除缓存内容Delay_ms(Delay_Time); /延时Send_ASCII(AT+CPMS
4、=SM,SM,SM);/所有操作都在 MT(模块终端)中进行Delay_ms(Delay_Time); /延时while(!Hand(OK); /等待设置成功CLR_Buf(); /清除缓存内容Delay_ms(Delay_Time); /延时Send_ASCII(AT+CNMI=2,1);/设置当有新短信到来时提示 Delay_ms(Delay_Time); /延时while(!Hand(OK); /等待设置成功CLR_Buf(); /清除缓存内容Delay_ms(Delay_Time); /延时Send_ASCII(AT+CMGF=1); /文本(TEXT)模式 Delay_ms(Dela
5、y_Time); /延时while(!Hand(OK); /等待设置成功CLR_Buf(); /清除缓存内容/* Delay_ms(Delay_Time); /延时Send_ASCII(AT+CMGD=1); /删除第一条信息Delay_ms(Delay_Time); /延时while(!Hand(OK); /等待设置成功CLR_Buf(); /清除缓存内容 */* Delay_ms(Delay_Time); /延时Send_ASCII(AT+CSCA=shoujihao); /文本 (TEXT)模式 Delay_ms(Delay_Time); /延时while(!Hand(OK); /等待设
6、置成功CLR_Buf(); /清除缓存内容 */while(1) if(strstr(Rec_Buf,+CMTI)!=NULL) /若缓存字符串中含有+CMTI就表示有新的短信CLR_Buf(); /清除缓存内容Delay_ms(Delay_Time); /延时Send_ASCII(AT+CMGR=1); /发送读取信息指令Delay_ms(Delay_Time); /延时while(!Hand(OK); /等待设置成功if(strstr(Rec_Buf,openjdq1)!=NULL) /如果信息内容是open1jdq1 = 0; /点亮 LED7指示灯else if(strstr(Rec_
7、Buf,closeljdq1)!=NULL) /如果信息内容是close1jdq1 = 1; /熄灭 LED7 指示灯else if(strstr(Rec_Buf,openjdq2)!=NULL) /如果信息内容是open2jdq2 = 0; /点亮 LED8指示灯else if(strstr(Rec_Buf,closejdq2)!=NULL) /如果信息内容是close2jdq2 = 1; /熄灭 LED8 指示灯CLR_Buf(); /清除缓存内容Delay_ms(Delay_Time); /延时Send_ASCII(AT+CMGD=1); /删除读取后的信息Delay_ms(Delay_
8、Time); /延时while(!Hand(OK); /等待设置成功CLR_Buf(); /清除缓存内容if(strstr(Rec_Buf,RING)!=NULL) /有电话时两路继电器吸合jdq1=0;jdq2=0;/*串口初始化函数*/*函数原型:void Serial_Init(void)/*函数功能:串口初始化/*输入参数:无/*输出参数:无/*/void Serial_Init(void)/串口初始化函数SCON = 0x50;/串口:方式 1,允许发送和接收TMOD = 0x20;/定时器 1:模式 2,8 位自动重装模式,用于产生波特率 TH1 = 0xFD; /11.0592M
9、HZ 晶振,波特率为 9600TL1 = 0xFD; TR1 = 1; /开启定时器 1 ES = 1; /开启串口中断EA = 1; /开启全局中断/*串口中断处理函数*/*函数原型:void Serial_Int(void)/*函数功能:串口中断处理/*输入参数:无/*输出参数:无/*/void Serial_Int() interrupt 4 ES = 0; /关串口中断,防止中断嵌套if(TI) /如果是发送中断,则不做任何处理TI = 0; /清除发送中断标志位if(RI) /如果是接送中断,则进行处理RI = 0; /清除接收中断标志位Rec_Bufi = SBUF; /将接收到的
10、字符串存到缓存中i+; /缓存指针向后移动if(i200) /如果缓存满,将缓存指针指向缓存的首地址i = 0;ES = 1; /开启串口中断/*发送字符(ASCII) 函数*/*函数原型:void Send_ASCII(unsigned char *b) /*函数功能:发送字符(ASCII 码)/*输入参数:unsigned char *b/*输出参数:无/*/void Send_ASCII(unsigned char *b) ES = 0; /关串口中断for (b; *b!=0;b+)SBUF = *b;while(TI!=1); /等待发送完成TI = 0; /清除发送中断标志位ES = 1; /开串口中断Send_Hex(0x0d); /发送回车符Send_Hex(0x0a); /发送换行符 /*time ms 延时函数*/*函数原型:Delay_ms(unsigned int time)/*函数功能:延时 Time ms/*输入参数:time/*输出参数:无/*/void Delay_ms(unsigned int time)unsigned char j;for(;time0;time-)j = 1500;while(j-);/*