搜索
bottom↓
回复: 8

彩虹等各位帅哥靓妹,请进来帮忙指点下TC35的C51驱动程序啊.【恢复】

[复制链接]

出0入0汤圆

发表于 2008-10-23 09:57:05 | 显示全部楼层 |阅读模式
   看了网上有关TC35控制的介绍文章,但对其中一些内容还是不甚了解..特此请教....原文提供的源码驱动,我逐条学习加了注释,但由于缺少部分程序,无法构成完整的思路......特请予以帮助为谢.   特别是缺失的函数调用就更不明白了....

//TC35i驱动程序



//==============AT有关指令的定义(用于发送/接收英文短信)==========================

char code    AT_tc35[]="AT+";                                //连机

char code   Bps_tc35[]="IPR=9600";                        //波特率

char code  Text_tc35[]="CMGF=1";                        // 1为TEXT格式,0为PDU格式

char code  CSMP_tc35[]="CSMP=17,167,0,0";        //设置TEXT模式参数

char code  CSCS_tc35[]="CSCS=GSM";                        //设置为GSM字符集

char code  CMGS_tc35[]="CMGS=";                                //设置对方电话号码



char code  CMGL_tc35[]="CMGL=";                                //列出SIM卡中的短信



char code  Read_tc35[]="CMGR=";                                //读取信息

char code Erase_tc35[]="CMGD=";                                //删除信息

char code  Send_tc35[]="CMGS=";                                //发送信息

char code  Creg_tc35[]="CREG?";                                //注册





//*********************************************************

//串口初始化                                              *

//晶振11.0592MHz,方式1时,波特率由T1的溢出率和SMOD位确定.  *

//置SMOD=0时,9600波特率,对应T1的计数初值为0xfd.           *

//*********************************************************

void Uart_init(void)

{

        TMOD  = 0x21;        //T1工作于方式2(计数常数自动重装的8位计数),T0工作于方式1(16位计数).均为内部计数和启停

        SCON  = 0x50;        //01010000b=>串口工作于模式1.方式1,8位UART,波特率需设置,允许接收,发送/接收中断清零.

    PCON &= 0x7f;        //置串口波特率的倍增位SMOD=0,即不加倍.

    TL1   = 0xfd;   //9600BPS,11.0592MHz xtal,SMOD=0时,T1采用方式2计数的初值为0XFD.

    TH1   = 0xfd;

    TR1   = 1;                //启动计数器T1

        ES=1;                        //允许串行口发送/接收中断

}





//*********************************************************

//发送一个ASCII字符                                                                                  *

//*********************************************************

void SendASC(unsigned char ASC)

{

        bit es;                        //

        es=ES;                        //保护串口中断设置状态

        ES=0;                        //关闭串口中断

        TI=0;                        //发送/接收完一帧后TI会自动置位,请求中断.需要再次发送/接收时,要通过指令清零

        SBUF=ASC;                //发送内容送SBUF

        while(!TI);                //等待一帧发送完.

        TI=0;                        //TI清零,为下次发送/接收做准备

        ES=es;                        //恢复串口中断设置状态

}





//*******************************************************

//通过串口向TC35发送长度为Len的字符串.字符串指针为*p.   *

//*******************************************************

void Send2tc35(unsigned char *p,unsigned char Len)

{

        while(Len--)                //Len--为先使用Len的值,再执行Len-1运算

        {

                SendASC(*p++);

        }

}







//*******************************************************

//通信中断接收程序

//*******************************************************

unsigned char RsBuq[];



void Rs232_do(void) interrupt 4 using 1

{

//        unsigned char RsPoint=0;                        //新增的=====

        if(RI==1)                                                        //如果接收中断标志为1,则进入

                {

                        RI=0;                                                //将RI清零

                        RsBuq[RsPoint++]=SBUF;                //接收到的内容送RsBuq[]中

                        if (Rspoint>=sizeof(RsBuf))        //如果长度达到

                                {

                                        RsPoint=0;                        //FlagRs232=0

                                }                                                //数据处理

                }

}





//*******************************************************

//发送AT连机命令

//*******************************************************

char code AT_code[]="OK";



void Send_AT(void)

{

        unsigned char *p;

        while(1)

        {

                ClrRsBuf(RsBuf,sizeof(RsBuf));                //清缓存

                Send2tc35(AT_tc35,2);                                //发送"AT"

                SendASC(OVER);                                                //??发送结束标志

                        //等待应答"OK"

                ES=1;                                                                //串行口必须开中断

                delayms(50);                                                //

                P=strstr(RsBuf,AT_code);                        //

                if(p!=NULL)break;                                        //

        }

}



//********************************************

//发送bps连机命令                            *

//********************************************

void Send_BPS(void)

{

        Send2tc35(AT_tc35,3);                                        //"AT+"

        Send2tc35(Bps_tc35,sizeof(Bps_tc35)-1);        //"IPR=9600"

        SendASC(OVER);                                                        //回车符

}





//******************************************************

//功能:设置TEXT格式

//******************************************************

void SetText(void)

{

        Send2tc35(AT_tc35,3);                                                //"AT+"

        Send2tc35(Text_tc35,sizeof(Text_tc35)-1);        //"CMGF=1"

        SendASC(OVER);                                                                //回车符

        delayms(100);

}





//*****************************************************

//功能:删除短信息

//参数:index  拟删除的短信序号

//*****************************************************

unsigned char EraseMsg(unsigned char index)

{

        unsigned char *p,i=20;

        Send2tc35(AT_tc35,3);                                                //"AT+"

        Send2tc35(Erase_tc35,sizeof(Erase_tc35)-1);        //"CMGD="

        SendASC(index);                                                                //需要删除的短信序号

        SendASC(OVER);                                                                //回车符

        ES=1;                                                                                //允许串口中断

        while(i--)                                                                        //??等待应答OK

        {

                delayms(200);

                P=strstr(RsBuf,AT_code);                                //??判断是否应答OK

                if(P!=NULL){return 1;}

        }

        return 0;

}



//*****************************************************

//功能:读取短信息

//参数:index  拟读取的短信序号

//*****************************************************

char code Ask_no[]="+CMGR:0,,0";

char code ERROR[]="ERROR";

char code Ask_tc35[]="/";



unsigned char ReadMsg(unsigned char index)

{

        unsigned char *p,i;

        unsigned char Buf[40];

        Send2tc35(AT_tc35,3);                                                //"AT+"

        Send2tc35(Read_tc35,sizeof(Read_tc35)-1);        //"CMGR="

        SendASC(index);                                                                //序号

        SendASC(OVER);                                                                //回车符

        ES=1;                                                                                //必须串口允许中断

        delayms(600);

        /*------

        ES=0;

        Send2tc35(RsBuf,99);

        ES=1;

        */

        p=strstr(RsBuf,ERROR);                                //???判断是否应答ERROR?

        if(P!=NULL)

        {

                Send_AT();                                                //???

                return 0;

                p=strstr(RsZBuf,Ask_no);                //应答为"+CMGR:0,,0",表示无信息.

                if(p!=NULL)return 0;

                p=strstr(RsBuf,Ask_tc35);                //20个字节后是MSG

                if(p==NULL)return 0;

                p=p+21;

                for(i=0,i<sizeof(Buf);i++)

                {

                        Buf=*p++;

                }

                if(EraseMsg(index)==0)return 0;

                p=strcpy(RsZBuf,Buf);                        //放回RsBuf

                return 1;

        }

}







//***********************************************************

//发送短信息

//***********************************************************

char code SK[]=">";



void SendMsgStart(void)

{

        unsigned char *p,i=10;

        Send2tc35(AT_tc35,3);                                                //"AT+"

        Send2tc35(Send_tc35,sizeof(Send_tc35)-1);        //"CMGS="

        SendASC(YinHao);                                                        //"

        Send2tc35(Mp1.Hand,sizeof(Mp1.Hand));                //号码?????

        SendASC(YinHao);                                                        //"

        SendASC(OVER);                                                                //回车符

        ES=1;                                                                                //必须开串口中断

        while(i--)                                                                        //等待应答"> "

        {

                delayms(100);                                                        //Get">"

                p=strstr(RsBuf,SK);                                                //">"

                if(p!=NULL)

                {

                        ClrRsBuf(RsBuf,sizeof(RsBuf));

                        delayms(150);                                                //Get">"

                        break;

                }

        }

}







   

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2008-12-28 02:52:42 | 显示全部楼层
期待完整。

出0入0汤圆

发表于 2009-7-16 20:57:13 | 显示全部楼层
我最近也在搞这个程序,但是还是有很多地方不懂,希望和你一起探论在方面的东西!我的QQ 389966526

出0入0汤圆

发表于 2009-7-18 19:40:56 | 显示全部楼层
要完成什么功能
我帮你QQ125393257
我的发送中文短信都做好了

出0入0汤圆

发表于 2009-12-24 17:26:41 | 显示全部楼层
我也正在做 学习了

出0入0汤圆

发表于 2010-6-21 16:03:07 | 显示全部楼层
我也正在做 学习了 谁有完整的啊 给我发一个 我QQ:306163847 谢谢!

出0入0汤圆

发表于 2010-6-22 17:32:27 | 显示全部楼层
恭喜打入国际市场,不过国外gov可不会和国内一样听之任之。

出0入0汤圆

发表于 2011-12-15 22:41:29 | 显示全部楼层
回复【楼主位】ql-dz.com 琼林电子
-----------------------------------------------------------------------

MARK

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-6-8 20:36

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

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