2226|0

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

急!!!tc35i短信收发问题!!![ [复制链接]

小弟刚学单片机不久,请高手帮忙!!!
我把下面这个程序用keil编译之后,烧写到单片机s52芯片,能成功收到短信。要是我给他回复短信之后让它控制引脚的高低电平,那么主函数main()
里边应该怎么写啊?
uchar Send_AT_Command( uchar type){ //发送AT指令
//拨号时号码放在phone.number
//其他用para_temp
  AT_Command_Type=type;
  send_count=0;
  switch(type){
  case RESET_TC35: //复位TC35
  strcpy(uart_buff,"AT+CFUN=1,1");
  break;
  case CHECK_PIN: //检查当前是否要输入PIN码
  strcpy(uart_buff,"AT+CPIN?");
  break;
  case TC35_INIT: //TC35初始化命令
  strcpy(uart_buff,"ATE0V0");
  break;
  //0D 0A 54 43 33 35 0D 0A
  case SIM_ID:
  strcpy(uart_buff,"ATE0V0+CMGF=1+CNMI=2,1");
  break;
  case AT_IPR:
  strcpy(uart_buff,"AT+IPR=9600");  
break;
  case SMSS_ID:
  strcpy(uart_buff,"ATE0V0^SSMSS=1+CNMI=2,1");
  break;
  case SMS_CMGF: //SMS 接收方式,
  strcpy(uart_buff,"ATE0V0+CMGF=0");
  break;
  case PHONE_WRITE: //存电话号码
  strcpy(uart_buff,"AT+CPBW=");
  strcat(uart_buff,para_temp);
  break;
  case PHONE_READ: //读电话本
  strcpy(uart_buff,"AT+CPBR=");
  strcat(uart_buff,&read_tmp);
  uart_buff[9]=0x0d;  
uart_buff[10]=0x0a;
  uart_buff[11]=0x00;   
uart_buff[12]=0x00;
  break;
  case SMS_CMGR: //读一个短信
  strcpy(uart_buff,"AT+CMGR=");
  strcat(uart_buff,para_temp);
  break;
  case SMS_CMGS: //写一个短信
  strcpy(uart_buff,"AT+CMGS=");
  strcat(uart_buff,para_temp);
  break;
  case SMS_CMGD: //删除一个短信
  strcpy(uart_buff,"AT+CMGD=");
  strcat(uart_buff,para_temp);
  break;
  case CMGS_MUB: //发报警短信内容
  strcpy(uart_buff,para_temp);
  break;
  case AT_COMMAND:
  break;
  default:
  receive_count=0;
  return(TRUE);
  }
  ES=1;
  strcat(uart_buff,"\x0d\x00");//在命令后加入CR
  send_count=0; //设置发送指针
  receive_count=0;
  AT_Command_Status=COMMAND_WAIT; //设置接收成功标志
  timer_S_cnt=0;
  txd_rxd_bit=0;
  at_send_bit=0;
  TI=1; //开始发送数据
  RI=0; //清除接收标志
  if (type==TC35_INIT){
  while (timer_S_cnt<6){
  if (AT_Command_Status!=COMMAND_WAIT||txd_rxd_bit==1)
  return(TRUE);
  }
  }
  else if((type==SMS_CMGR)){
  while (timer_S_cnt<6){
  if (AT_Command_Status!=COMMAND_WAIT||txd_rxd_bit==1)
  return(TRUE);
  }
  }
  else if((type==CALL_ID)){
  while (timer_S_cnt<2){
  if (AT_Command_Status!=COMMAND_WAIT||txd_rxd_bit==1)
  return(TRUE);
  }
  }
  else{
  while (timer_S_cnt<6){
  if (AT_Command_Status!=COMMAND_WAIT||txd_rxd_bit==1){
  return(TRUE);   
}
  }
  }
  return(FALSE);
}
uchar READ_TEL(uchar r){ //读短信号码1-20个
  // uchar r;
  para_temp[0]=(r/10)+0x30;para_temp[1]=(r%10)+0x30; para_temp[2]=0x0d;para_temp[3]=0x00;
  para_temp[4]=0x00;para_temp[5]=0x00;para_temp[6]=0x00;para_temp[7]=0x00;
  para_temp[8]=0x00;para_temp[9]=0x00;para_temp[10]=0x00;para_temp[11]=0x00;
  // timer_S_cnt=0; while(timer_S_cnt<1&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
  Send_AT_Command(SMS_CMGR);
  timer_S_cnt=0;
  //while(timer_S_cnt<1&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
  send_count=0;
  if(strsearch("CMGR: 0,,0")){ //+CMGR: 0,,0 没有短信返回
  // timer_S_cnt=0; while(timer_S_cnt<1) watch_dog_clear;
  ES=1; //设置发送指针
  receive_count=0;
send_count=0xff;
RI=0 ;
  return(FALSE);
  }
  else if(uart_buff[1]==0x0d&&uart_buff[0]==0x34){   
return(FALSE);
  }
  else{   
  if(AT_Command_Status==COMMAND_ERROR)
return(FALSE);
  else return(TRUE);
  }
}

//============================================
//========== 读写短信程序
//====================================================
void read_sms(){   
  uchar i,r,j,t;
  for(r=1;r<20;r++){
  timer_tmp=0;  
// while(timer_tmp<15) watch_dog_clear;// if(strsearch("+CMTI:")) return; //是否有新短信
  num_tmp1=r;
  if(READ_TEL(r)!=1){ //读一个短信 at+cmgr=1-19 读指令
  if(strsearch("+CMTI:")) return;
  continue;
  }//TEL_temp[18] 读出对方号码
  t=2;  
i=0;
for(j=15;j<25;j++){
if((uart_buff[j]==0x22)&&(uart_buff[j+1]==',')&&uart_buff[j+2]==0x22)   
break;
  }
  j=j+3;
  if(uart_buff[j]=='+') j=j+3;
for(;j<40;j++){   
if(uart_buff[j]==0x22)   
break;
para_temp[t++]=uart_buff[j];
TEL_temp[i++]=uart_buff[j];
}
TEL_temp[i++]=0x0d ;
TEL_temp[i++]=0x00 ;
para_temp[t++]=0x0d;
para_temp[t++]=0x00;para_temp[t++]=0x00;

  //---------------手机号码设置-------------
if((i=strsearch("CHN"))){ // 发中文//有些比较重要的东西你可以存到卡就,重新开机也没有问题
system_server=SYS_ALARM;   
return;
}   
  else if((i=strsearch("RED"))){  
  
system_server=SYS_NUMSAVE;
return;
}
else if((i=strsearch("GRE"))){   
system_server=SYS_FEE;
return;
}
  else{
  para_temp[0]=(num_tmp1/10)+0x30;
para_temp[1]=(num_tmp1%10)+0x30;  
para_temp[2]=0x0d;para_temp[3]=0x00;
Send_AT_Command(SMS_CMGD);
timer_S_cnt=0;  
// while(timer_S_cnt<10&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
for(i=10;i<=MAX_TM-3;i++){   
uart_buff=0;
  }
  Send_AT_Command(SIM_ID);
return;
}
  }
}

void send_sms(){ //发送短信
  uchar j=1,i=1;
  Send_AT_Command(SIM_ID);
  //0011000D91683118180295F20008A70A8F66670953719669FF01
  Send_AT_Command(SMS_CMGF);
  TMP_BUF=0;
para_temp[TMP_BUF++]='2'; //短信号码长度,如果每加一个中文,长度加2
para_temp[TMP_BUF++]='5';
para_temp[TMP_BUF++]=0x0d;
para_temp[TMP_BUF++]=0x00;
para_temp[TMP_BUF++]=0x00;
  Send_AT_Command(SMS_CMGS);
  TMP_BUF=0;
para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='1';para_temp[TMP_BUF++]='1';
para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='D';
  para_temp[TMP_BUF++]='9';para_temp[TMP_BUF++]='1';para_temp[TMP_BUF++]='6';para_temp[TMP_BUF++]='8';
//3118180295F2
  j=0; //发送对方号码
  para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';// para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='8';
  para_temp[TMP_BUF++]='3';para_temp[TMP_BUF++]='2';
para_temp[TMP_BUF++]='1';para_temp[TMP_BUF++]='7';
para_temp[TMP_BUF++]='5';para_temp[TMP_BUF++]='4';
para_temp[TMP_BUF++]='F';para_temp[TMP_BUF++]='9';
/* do{ //动态电话号码
para_temp[TMP_BUF++]=TEL_temp[j+1];
para_temp[TMP_BUF++]=TEL_temp[j];
j=j+2;
if(TEL_temp[j+1]==0x0d){  
para_temp[TMP_BUF++]='F';
para_temp[TMP_BUF++]=TEL_temp[j];
break;
}
}while(j<=18);*/
  //短信格式设备
  para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='8';
para_temp[TMP_BUF++]='A';para_temp[TMP_BUF++]='0';
//短信长度、 5个字,10个英文
para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='A';
//短信内容
//53D1 9001 6210 529F FF01 发送成功
para_temp[TMP_BUF++]='5';para_temp[TMP_BUF++]='3';para_temp[TMP_BUF++]='D';para_temp[TMP_BUF++]='1';
para_temp[TMP_BUF++]='9';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='1';
para_temp[TMP_BUF++]='6';para_temp[TMP_BUF++]='2';para_temp[TMP_BUF++]='1';para_temp[TMP_BUF++]='0';
para_temp[TMP_BUF++]='5';para_temp[TMP_BUF++]='2';para_temp[TMP_BUF++]='9';para_temp[TMP_BUF++]='F';
para_temp[TMP_BUF++]='F';para_temp[TMP_BUF++]='F';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='1';
  //短信结束符
  para_temp[TMP_BUF++]=0X1A;para_temp[TMP_BUF++]=0X0D;
  para_temp[TMP_BUF++]=0X00;
  Send_AT_Command(CMGS_MUB);
  system_server=SYS_SMSR;
  receive_count=0;
  AT_Command_Status=COMMAND_WAIT; //设置接收成功标志
  send_count=0xff;timer_S_cnt=0;
  while(timer_S_cnt<15&&(AT_Command_Status==COMMAND_WAIT)){
  if(strsearch("+CMGS:")) break;
  else if(txd_rxd_bit) break;
// watch_dog_clear;
  }
  para_temp[0]=(num_tmp1/10)+0x30;
  para_temp[1]=(num_tmp1%10)+0x30;  
  para_temp[2]=0x0d;
  para_temp[3]=0x00;
  Send_AT_Command(SMS_CMGD);
  timer_S_cnt=0;  
// while(timer_S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
  Send_AT_Command(SIM_ID);
  // IO_OUT=1;
  for(i=0;i<=MAX_TM-2;i++){   
  uart_buff=0;
  }
}
void main (void)
{ uchar i;
system_server=SYS_SMSR;   
  LED=1;GREEN=1;RED=1;
  Sys_Init();
  Initialize_Model();  
  delay1ms(2000);//延时2S
start();
  send_sms(); //发一次短信
delay1ms(2000);//延时2S

  for(i=0;i<20;i++)
  {
  while(!RI);
  RI= 0;
}
delay1ms(2000);//延时2S
if(RI==0)
{ read_sms();
}
while(1)
  {   
  
  }
}
这个程序带中断程序。
点赞 关注

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表