当前位置: 代码迷 >> 移动平台 >> 小弟我用AT89S52控制TC35i但是无法读取消息内容
  详细解决方案

小弟我用AT89S52控制TC35i但是无法读取消息内容

热度:4977   发布时间:2013-02-26 00:00:00.0
求助:我用AT89S52控制TC35i但是无法读取消息内容
大家好!春节刚过,在此给大家拜个晚年!
本人用AT89S52控制TC35i,通过“AT+CMGR=5<CR>”读取短消息,但是得不到内容(位置5上是存在信息的),就连“+CMGR:”也不返回;好像只返回了2个字符;我的TC35i设置的是Text模式(“AT+CMGF=1<CR>”);程序是用C编的,读取消息时使用的是查询方式(如果用中断方式,结果也是一样),通过“AT+CMGR=5<CR>”。捣鼓了好几天了还是出不来。希望得到大家的帮助,谢谢!!
我的程序清单如下:
// 设置波特率
void setup_t1(void)
{unsigned char j;
  TMOD=0x20;
  TH1=0xfd;
  TL1=0xfd;
  TR1=1;
  ET1=0; 
for(j=0;j<250;j++) xianshi(1,1,1,1);//为了便于观察状态而设置的显示信息
}

// 设置串口
void setup_ck(void)
{unsigned char j;
  SCON=0x50;
  PCON=0x00;
  EA=1;
  ES=1;
  for(j=0;j<250;j++) xianshi(2,2,2,2); //为了便于观察状态而设置的显示信息
}

//////////////////////////////////////////////////////////////
// 设置为文本格式
// AT指令:AT+CMGF=1<CR>
void setcmgftxt(void)
{unsigned char j,msgtemp,k=0;
  ES=0;
  SBUF='A';while(!TI); TI=0;
  SBUF='T';while(!TI); TI=0;
  SBUF='+';while(!TI); TI=0;
  SBUF='C';while(!TI); TI=0;
  SBUF='M';while(!TI); TI=0;
  SBUF='G';while(!TI); TI=0;
  SBUF='F';while(!TI); TI=0;
  SBUF='=';while(!TI); TI=0;
  SBUF='1';while(!TI); TI=0;
  SBUF=0x0d;while(!TI);TI=0;
while(1)
{
while(!RI);RI=0;
  msgtemp=SBUF; 

  switch (k)
  {
  case 0:
  k=((msgtemp=='O'||msgtemp=='o')?++k:0);
break;
  case 1:  
  k=((msgtemp=='K'||msgtemp=='k')?++k:0);
break;
case 2:
k++;
  break;
case 3:
k++;
  break;  
  }//switch结束
  if(k==4) 

for(j=0;j<250;j++) xianshi(3,3,3,3); //为了便于观察状态而设置的显示信息
break;
}
  }
ES=1;  
}
////////////////////////////////////////////
void SetCnmi(void)
{
  unsigned char data j,k=0,msgtemp;
ES=0;//关串口中断
  SBUF='A';while(!TI); TI=0;
  SBUF='T';while(!TI); TI=0;
  SBUF='+';while(!TI); TI=0;
  SBUF='C';while(!TI); TI=0;
  SBUF='N';while(!TI); TI=0;
  SBUF='M';while(!TI); TI=0;
  SBUF='I';while(!TI); TI=0;
  SBUF='=';while(!TI); TI=0;
  SBUF='1';while(!TI); TI=0;
  SBUF=',';while(!TI); TI=0;
  SBUF='1';while(!TI); TI=0;
  SBUF=',';while(!TI); TI=0;
  SBUF='0';while(!TI); TI=0;
  SBUF=',';while(!TI); TI=0;
  SBUF='0';while(!TI); TI=0;
  SBUF=',';while(!TI); TI=0;
  SBUF='1';while(!TI); TI=0;  
  SBUF=0x0d;while(!TI); TI=0;
while(1)
{
while(!RI);RI=0;
  msgtemp=SBUF; 

  switch (k)
  {
  case 0:
  k=((msgtemp=='O'||msgtemp=='o')?++k:0);break;
  case 1:  
  k=((msgtemp=='K'||msgtemp=='k')?++k:0);break;
case 2:
k++;
  break;
  case 3:
k++;
  break;  
  }//switch结束
  if(k==4) 

for(j=0;j<250;j++) xianshi(4,4,4,4); //为了便于观察状态而设置的显示信息
break;
}
  }
ES=1;
}

///////////////////////////////////////////////////////////////////////////////////////////
// 从SIM卡中读取一条短消息
// AT指令:AT+CMGR=1<CR>
void read_msg(unsigned char imsg)