搜索
bottom↓
回复: 5

用TC35I的text方式发短信,用中断方法,最后一步不行了

[复制链接]

出0入0汤圆

发表于 2009-10-24 08:17:10 | 显示全部楼层 |阅读模式
#include<STC12C5A60S2.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
uchar code ATE0[]="ATE0";      //禁止回显
uchar code CMGF[]="AT+CMGF=1"; //设置短信为TEXT模式
uchar code CREG[]="AT+CREG?";  //查询网络注册情况
uchar code CMGS[]="AT+CMGS=";  //发送短信
uchar code PHONE[11]="13515380480";
uchar TC35[60]="\n";           //串口中断接收数组并赋予初值
uchar SM[]="";
uchar NUM;
sbit LED=P0^7;
bit flag=0;   //串行口中断标志位

//延时程序
void delay(uint t)
{
  while(t--);
}


//清除中断接收数组
void TC35_clr()
{
  uchar i;
  for(i=0;i<60;i++)
  TC35=0;
}


//初始化串口
void init_UART()
{
  SCON=0X50;
// S2CON=0X50;
  BRT=0Xfd;
  AUXR=0X11;
  ES=1;
// IE2=0X01;
  IP=0X02;      //串行口,定时器0为高优先级
  IPH=0X12;
  IT0=1;      //中断0下降沿触发
  IT1=1;      //中断1下降沿触发
  IE=0X97;    //开总中断,串行口,定时器0,外部中断0,1   不开定时器1中断
}


//串口中断
void ser()interrupt 4
{
  uchar i;
  ES=0;
  for(i=0;i<NUM;i++)
   {     
     while(!RI);RI=0;
     TC35=SBUF;
   }
  flag=1;
  ES=0;
}


//禁止回显
void FS_ATE0()   
{
  uchar i=0;
  ES=0;
  while(ATE0!='\0')
  {
    SBUF=ATE0;
    while(!TI);
    TI=0;
    i++;
  }
  SBUF=0x0d;
  while(!TI);
  TI=0;
  NUM=11;
  ES=1;
}

//改为TEXT模式
void FS_CMGF()   
{
  uchar i=0;
  ES=0;
  while(CMGF!='\0')
  {
    SBUF=CMGF;
    while(!TI);
    TI=0;
    i++;
  }
  SBUF=0x0d;
  while(!TI);
  TI=0;
  NUM=6;
  ES=1;
}

//查询网络注册情况
void FS_CREG()   
{
  uchar i=0;
  ES=0;
  while(CREG!='\0')
  {
    SBUF=CREG;
    while(!TI);
    TI=0;
    i++;
  }
  SBUF=0x0d;
  while(!TI);
  TI=0;
  NUM=20;
  ES=1;
}



  
//void GET_PHONE()


CLEAR_TC35()
{
uchar a;
for(a=0;a<50;a--)
  TC35[a]=0;
}


//发送短信
void FS_CMGS()   
{
  uchar i=0;
  uchar h=0;
  ES=0;
  while(CMGS!='\0')
   {
    SBUF=CREG;
    while(!TI);
    TI=0;
    i++;
   }
  while(PHONE[h]!='\0')
   {
    SBUF=CREG[h];
    while(!TI);
    TI=0;
    h++;
   }
  SBUF=0x0d;
  while(!TI);
  TI=0;  
  NUM=4;
  ES=1;
}

/*
void SM_SJ()
{


FS_SJ()
{

TIME_PCF8563()
{
}

void INT0()
{
EX0=0;
}
*/


void int1()interrupt 2
{
  EX1=0;
  delay(1000);delay(1000);delay(1000);
  do  
    {
     FS_ATE0();     //禁止回显
     while(!flag);
    }
  while(!(TC35[7]==0X4F)&&(TC35[8]==0X4B));   //返回值是否有OK
  CLEAR_TC35();
  do
   {
     FS_CMGF();     //改为TEXT模式
     while(!flag);
   }
  while(!(TC35[2]==0X4F)&&(TC35[3]==0X4B));   //返回值是否有OK
  CLEAR_TC35();  
  do
   {
     FS_CREG();      //查询网络注册情况
     while(!flag);
   }
  while(!(TC35[9]==0X30)&&(TC35[11]==0X31));   //返回值是否有1,0即0,禁止网络注册主动提供结果码(缺省值)                                                                                                                                           //1, 已注册本地网络运营商     
  CLEAR_TC35();
  FS_CMGS();        //发送短信
  LED=0;       //LED亮
  EX0=1;
}
        
void main()
{
  delay(1000);delay(1000);delay(1000);delay(1000);
  init_UART();

// while(!flag);

//  while(!(TC35[2]==0X3E));   //返回值是否有>

  //CLEAT_TC35();


  while(1);
}

出0入0汤圆

 楼主| 发表于 2009-10-24 08:22:03 | 显示全部楼层
我用上面的程序,用查询的方法来判决是否35有返回值,用led来设置标志位,前面的程序通了,到了下面不行了
   CLEAR_TC35();
  FS_CMGS();        //发送短信
  LED=0;       //LED亮

出0入0汤圆

 楼主| 发表于 2009-10-24 08:25:12 | 显示全部楼层
特别向苹果猫请教,先谢谢,前面给的指导很有用

出0入8汤圆

发表于 2009-10-24 10:33:59 | 显示全部楼层
先用串口调试器调试成功了再写代码。
另LS的代码风格要改进

出0入0汤圆

 楼主| 发表于 2009-10-24 13:35:35 | 显示全部楼层
用调试器以经调试了N次了,正常

出0入0汤圆

 楼主| 发表于 2009-10-24 13:42:07 | 显示全部楼层
关于代码风格3楼能说的详细点吗
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-3 17:08

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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