完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
SIM900A模块用串口调试的时候功能正常 写的一段收到短信就控制LED灯的程序,这是买的时候附赠的资料例程,按理说应该没啥问题,为什么LED灯控制不了 #include #include #include //发kai时,led亮 //发guan时 led熄灭 // //正常启动现象:焊接板子上的led亮灭各1秒钟时间,如果一直常亮,说明为初始化成功 //gsm模块上面的led,如果3S闪烁1次,说明正常连接上网络,如果快速亮灭说明还没有连接网络 // // 11.0592 9600 // //注意:所有的操作都需要在 gsm模块上面的led,3S闪烁 才能正常通信 ***it led_test=P1^5; ***it led1=P2^7; #define Buf_Max 60 //缓存长度200 #define Delay_time 250 //延时长度 unsigned char i = 0; //定义缓存指针 unsigned char Rec_Buf[Buf_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 Hand(unsigned char *a); //声明判断缓存中是否含有指定的字符串函数 void main() { unsigned int t=0; unsigned char time_temp=0; led1=0; Serial_Init(); //初始化串口 CLR_Buf(); //清除缓存内容 Send_ASCII("AT"); //发送联机指令 while(!Hand("OK")) //判断是否握手成功,如果不成功延时一会,再发送AT握手指令 { Delay_ms(100); //延时 time_temp++; if(time_temp>10) { time_temp =0; Send_ASCII("AT"); //发送联机指令 } } time_temp =0; CLR_Buf(); //清除缓存内容 Send_ASCII("ATE0"); //发送联机指令 while(!Hand("OK")); //判断是否握手成功,如果不成功延时一会,再发送AT握手指令 time_temp =0; CLR_Buf(); //清除缓存内容 Send_ASCII("AT+CMGF=1"); //发送联机指令 while(!Hand("OK")); //判断是否握手成功,如果不成功延时一会,再发送AT握手指令 time_temp =0; CLR_Buf(); //清除缓存内容 Send_ASCII("AT+CMGD=1,4"); //发送联机指令 while(!Hand("OK")); //判断是否握手成功,如果不成功延时一会,再发送AT握手指令 time_temp =0; CLR_Buf(); //清除缓存内容 t=0; while(1) { if(strstr(Rec_Buf,"+CMTI")!=NULL) //若缓存字符串中含有"+CMTI"就表示有新的短信 { CLR_Buf(); //清除缓存内容 Send_ASCII("AT+CMGR=1"); //发送读取信息指令 while(!Hand("OK")); //等待设置成功 if(strstr(Rec_Buf,"kai")!=NULL) //如果信息内容是"kai" {led_test = 0;} if(strstr(Rec_Buf,"guan")!=NULL) //如果信息内容是"guan" {led_test = 1;} CLR_Buf(); //清除缓存内容 Send_ASCII("AT+CMGD=1,4"); //删除读取后的信息 while(!Hand("OK")); //等待设置成功 CLR_Buf(); //清除缓存内容 t=0; } t++; if(t/2500){//正常工作 启动期间 //一次大约为 1S t=0; led1=~led1; //闪烁表示系统运行中,等待指令输入 } } } /***************************串口初始化函数*****************************/ /*函数原型:void Serial_Init(void) /*函数功能:串口初始化 /*输入参数:无 /*输出参数:无 /**********************************************************************/ void Serial_Init(void)//串口初始化函数 { SCON = 0x50;//串口:方式1,允许发送和接收 TMOD = 0x20;//定时器1:模式2,8位自动重装模式,用于产生波特率 TH1 = 0xFD; //11.0592MHZ晶振,波特率为9600 TL1 = 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_Buf = SBUF; //将接收到的字符串存到缓存中 i++; //缓存指针向后移动 if(i>(Buf_Max-1)) //如果缓存满,将缓存指针指向缓存的首地址 { 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!=' |