2848|1

333

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

编程发短信给手机,短信中一直附加着一段乱码 [复制链接]

我编写程序通过GSM模块发送短信,虽然短信能够发送,但是正确的短信后面一直附加着一段乱码,请各位帮忙找找原因。

这个ptr12[]里面存放着ptr1[]和ptr2[],他们分别是我的溶氧和温度的数据.

我红色下划线标出来的这段程序是发送短信的程序

用串口监控,发现我正确的短信是后面是一推乱码,发到手机上也是这样。
我把发送短信的程序贴上来,帮忙分析下错误:
/************************************************
//完整的短信发送函数
//dialnum:手机号码 text:短信内容
************************************************/
void Send_Message_G(uchar *dialnum,uchar *text)
{
Send_AT();  //发送AT
Set_Mode(1);         //设置短信模式:text
TransmitText(dialnum,text); //设置号码,短信内容,发送
}
下面这段是上面发送短信中的子程序 :TransmitText(dialnum,text),我估计问题应该出在下面这段。
/*************************************************
发送TEXT短信 AT+CMGS="手机号码"
*dialnum 目的号码    *text短信内容
返回:1 发送成功  0 发送失败   
************************************************/
void TransmitText(uchar *dialnum,uchar *text)  
{         
uint i=10;
uchar *p;
while(i--)//10次,有成功就退出
{
  RxPoint=0;     //buffer指针清0
  SendString("AT+CMGS=\"15751010834\"\r");//信息发送指令 AT+CMGS="手机号码"
  Delay_Nms(1000);               
  if(flag==1)     //当单片机接收到回显的中断程序里,我把flag设置为1作为有回显标记(正确指令发送到GSM模块会有"OK“返回值)
                {
                  flag=0;
                  break;
                }
                Delay_Nms(10);
        }   
        while(i--)
        {
  p=LookFor_Str(RxBuf,">"); //检测回显中">"
                Delay_Nms(50);
  if(p!=0)          //如果接受到 >  则发送text
  {
                  break;
                }
                Delay_Nms(10);
        }
        while(i--)  
        {                                      
   RxPoint=0;    //清空接收缓冲区                     
   SendString(text); //发送短信内容                        
   SendString("\x1a\r"); //'\x1a'结束符(相当CTRL+Z) '\r'回车符  
   Delay_Nms(50);
                        
   if(flag==1)
                        {
                          flag=0;
                          break;
                        }
                        Delay_Nms(10);
        }
         while(i--)
         {           
   p=LookFor_Str(RxBuf,"OK"); //查找OK
                        Delay_Nms(50);
   if(p!=0)          //发送成功
   {
       break;
   }
   
    Delay_Nms(10);
   
}
}

我把上面中的SendSting也贴一下

/*******************************************
函数名称:SendSting
功    能:向GSM模块发送字符串
参    数:ptr--指向发送字符串的指针
返回值  :无
********************************************/
void SendString(uchar *ptr)
{      
      while(*ptr != '\0')
      {
            while (!(IFG1 & UTXIFG0));                // TX缓存空闲?
            TXBUF0 = *ptr++;                       // 发送数据
      }
      while (!(IFG1 & UTXIFG0));
      TXBUF0 = '\n';
}
此帖出自单片机论坛

最新回复

字符串改成数组,发送方式由整句发送改成指定位置指定长度,原因是单片机内部存储大量数据时,不知道为什么会在发送整句的时候在结尾没有识别到‘\0’,所以会沿着存储区继续往下读取,出现一堆莫名其妙的乱码。 以上是我之前用的时候出现的现象,另外供地什么的也要检查,但是用电脑的串口调试助手就没有这个问题,奇怪的很  详情 回复 发表于 2014-8-15 08:11
点赞 关注
 

回复
举报

565

帖子

5

TA的资源

纯净的硅(中级)

沙发
 
字符串改成数组,发送方式由整句发送改成指定位置指定长度,原因是单片机内部存储大量数据时,不知道为什么会在发送整句的时候在结尾没有识别到‘\0’,所以会沿着存储区继续往下读取,出现一堆莫名其妙的乱码。
以上是我之前用的时候出现的现象,另外供地什么的也要检查,但是用电脑的串口调试助手就没有这个问题,奇怪的很
此帖出自单片机论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表