OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9303|回复: 3

小弟最近做用stm32控制sim900a,通过手机发短信控制led,继电器等,有点不是很明白,看了他们写的51单片机接收程序

[复制链接]

21

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2013-9-17
在线时间
29 小时
发表于 2014-5-11 19:18:06 | 显示全部楼层 |阅读模式
5金钱
先发程序
void readcommend(void)
 {  
  uchar i;
   for(i=0;i<5;i=i+1)   //将短信内容中的指令部分截取出来放到
      { //CommandBuf数组中
                          CommandBuf=SystemBuf[64+i];             //
}
   if((CommandBuf[0]=='o')&&(CommandBuf[1]=='p')&&(CommandBuf[2]=='e')&&(CommandBuf[3]=='n'))  //判断指令是否为开继电器指令
{
                                                                                                 
    switch(CommandBuf[4])
       {
          case 0x31: realy0=0; //继电器 1开启
               break;
      case 0x32: realy1=0; //继电器 2开启
               break;
      case 0x33: realy2=0;    //继电器 3开启
               break;
      case 0x34: realy3=0; //继电器 4开启
               break;
      case 0x35: realy4=0; //继电器 5开启
               break;
      case 0x36: realy5=0; //继电器 6开启
               break;
      case 0x37: realy6=0;  //继电器 7开启
               break;
      case 0x38: realy7=0;  //继电器 8开启
               break;
  case 0x4f: P1=0;
           break;
  case 0x3f: temp=P1;
 check=1;
break;
      default:flag=1;  //其他指令定义为错误操作
               break;   //置位错误操作位为1
 }
  else if((CommandBuf[0]=='s')&&(CommandBuf[1]=='h')&&(CommandBuf[2]=='u')&&(CommandBuf[3]=='t')) //判断指令是否为关闭电器指令
    {
 
  switch(CommandBuf[4])
      {
        case 0x31: realy0=1;  //关闭继电器1
          break;
    case 0x32: realy1=1; //关闭继电器2
          break;
    case 0x33: realy2=1; //关闭继电器3
         break;
    case 0x34: realy3=1; //关闭继电器4
         break;
    case 0x35: realy4=1; //关闭继电器5
          break;
    case 0x36: realy5=1; //关闭继电器6
         break;
    case 0x37: realy6=1;     //关闭继电器7
          break;
    case 0x38: realy7=1; //关闭继电器8
         break;

 case 0x531=0xff;
     break;
    default:flag=1; //其他指令定义为错误操作
         break; //置位错误操作位为1
 }
 }
其中  CommandBuf=SystemBuf[64+i];中是吧sim900a发送给stm32的数据读出来,以前的接收数据都清零了,除开其他前面的的,第64个就是接收的数据,我发送的是  open1,通过stm32的数字一个个判断接收的内容,但是CommandBuf[4]接收的数据是1,为什么它要与0x31做比较,有点搞不懂,但是我知道1的assic吗是49,而49的16进制是0x31 ,但是我不知道1在stm32数据储存区中到底以这么样的形式储存,为什么要用0x31做比较,这个0x31站几个字节。
还有个问题是在接收到+CMTI: ”SM”,1这个数据,寻找短信在sim卡的储存位置是的程序
  void read_message(void)
 {
   uchar i;
   Delay_ms(1000);
   for(i=0;i<2;i++)
   {
numberbuf=SystemBuf[14+i];                                                   
}
  
   for(i=0;i<8;i++)
{
AT_Read=AT_CMGR;                                                      
}
   for(i=8;i<10;i++)
   {
AT_Read=numberbuf[i-8];                                                  
}
for(Rx=0;Rx<RxIn;Rx++)
                {
                        SystemBuf[Rx]=0x00;    
                }
                Rx=0;  
  AT_Read[10]='\0';
   sendstring(AT_Read);   //发送AT+CMGR=?,?代表短信储存所在位置
   
}
numberbuf=SystemBuf[14+i];这个程序 ,我知道 ok加上+CMTI: ”SM”,1第14个字节是数据在sim储存空间,但是最后一个“1”只站一个字节,这里他的程序
 for(i=0;i<2;i++)
   {
numberbuf=SystemBuf[14+i];                                                   
}
却是用了2个字节,这个是这么理解吗,如果是对的怎样理解,我知道一般的sim卡可以储存50条短信,但是读取两个字节的sim位置,不会导致如果你的短信存储在“1”这个位置,度两个数据的话,不是变成10了,这会导致读取短信出错,求大神指导

最佳答案

查看完整内容[请看2#楼]

建议楼主先通过串口调试助手,玩一玩GSM模块 然后,提醒下你:串口助手都是以ASCII字符显示的,注意ASCII内码的知识学习。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-11 19:18:07 | 显示全部楼层
建议楼主先通过串口调试助手,玩一玩GSM模块
然后,提醒下你:串口助手都是以ASCII字符显示的,注意ASCII内码的知识学习。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

60

主题

225

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
483
金钱
483
注册时间
2013-7-27
在线时间
4 小时
发表于 2014-10-12 11:36:11 | 显示全部楼层
最好贴个原理图,以便大家分析。
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-10-19
在线时间
0 小时
发表于 2014-11-26 12:22:45 | 显示全部楼层
楼主,你有做出来控制LED等的程序了吗?分享一下好不好
以后多逛论坛,向大神们学习
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 17:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表