中级会员
 
- 积分
- 264
- 金钱
- 264
- 注册时间
- 2013-9-17
- 在线时间
- 29 小时
|
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 0x53 1=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内码的知识学习。
|