大家好!春节刚过,在此给大家拜个晚年!
本人用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)