/******************************************************************
MADE BY lyq
my BLOG http://hi.baidu.com/282280072
*******************************************************************/
#include "uart.c"
#include "delay.h"
#define uchar unsigned char
#define uint unsigned int
#define NULL 0
#define ATwaits 10
#define DWWwaits 10
#define Readwaits 10
#define Sendwaits 10
#define RsBuf_N 50
char RsBuf[RsBuf_N]; //定义串口接收数据缓冲区
uchar RsPoint;
//以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
void Send_AT(void);
char *mystrstr(char *s, char *t);
void Num2char(uchar i);
/***********************发送联机指令******************************
*功 能: 串口发送数组命令到TC35,"AT",
*形 参:
*返 回 值:
*备 注: 测试GSM模块是否连接正确
*****************************************************************/
void Send_AT(void)
{
uchar *p,i=ATwaits; //ATwaits=10
//lcd_disp_str(RsBuf,1);
while(i--) //测试10次,在某一次成功就退出
{
//RsBuf[0]='\0'; //有下一句就不需要这句 //清空接收缓冲区
RsPoint=0;
// 本来只有\r 我添加的\n 后来证明 可以不加的
SendString("AT\r");
//****************************等待应答"OK"
ES=1; //必须中断 // 串口中断应许
delayms_100ms();//等待接受数据完成//delayms_1000ms();delayms_1000ms();
p=mystrstr(RsBuf,"OK"); //接收到的数据存在RsBuf
if(p!=NULL) //接收到"OK"
{
delayms_1000ms();delayms_1000ms();//delayms_1000ms();delayms_1000ms();
break;
}
delayms_1000ms();
}
}
/***********************设置短消息模式******************************
*功 能: 串口发送数组命令到TC35,AT+CMGF=1
*形 参: uchar m =1 text模式 m=0 PDU模式
*返 回 值:
*备 注: 1 TEXT
*****************************************************************/
void Set_MODE(uchar m)
{
uchar *p,i=ATwaits; //ATwaits=10
//lcd_disp_str(RsBuf,1);
while(i--) //测试10次,在某一次成功就退出
{
RsPoint=0;
if(m)
SendString("AT+CMGF=1"); //设置短消息模式 1 TEXT
else
SendString("AT+CMGF=0"); //设置短消息模式 PDU模式
//****************************等待应答"OK"
ES=1; //必须中断 // 串口中断应许
delayms_100ms();//等待接受数据完成//delayms_1000ms();delayms_1000ms();
p=mystrstr(RsBuf,"OK"); //接收到的数据存在RsBuf
if(p!=NULL) //接收到"OK"
{
delayms_1000ms();delayms_1000ms();//delayms_1000ms();delayms_1000ms();
break;
}
delayms_1000ms();
}
}
/***********************设置短消息中心******************************
*功 能: 串口发送数组命令到TC35, AT+CSCA=“+8613800531500”回车
*形 参: uchar *canter 短消息中心 “+8613800531500”
*返 回 值:
*备 注:
*****************************************************************/
void Set_CENTER(uchar *center)
{
uchar *p,i=ATwaits; //ATwaits=10
//lcd_disp_str(RsBuf,1);
while(i--) //测试10次,在某一次成功就退出
{
RsPoint=0;
SendString("AT+CSCA="); //设置短消息中心
SendASC('"');
SendString(center); //短消息中心号码
SendASC('"');
SendASC('\r'); //发送回车指令//
//****************************等待应答"OK"
ES=1; //必须中断 // 串口中断应许
delayms_100ms();//等待接受数据完成//delayms_1000ms();delayms_1000ms();
p=mystrstr(RsBuf,"OK"); //接收到的数据存在RsBuf
if(p!=NULL) //接收到"OK"
{
delayms_1000ms();delayms_1000ms();//delayms_1000ms();delayms_1000ms();
break;
}
delayms_1000ms();
}
}
/***********************发送TEXT短信息********************************
*功 能: TEXT模式发送短信息
*形 参: char *dialnum 目的号码+8613333333333 char *text发送内容
*返 回 值: 1 发送成功 0 发送失败
*备 注:发送TEXT短信息 之前应该先 1,设置短消息模式 AT+CMGF=? (0)=PDU (1)=TEXT
2,设置短消息中心 AT+CSCA=“+8613800531500”回车
*****************************************************************/
char TransmitText(char *dialnum,char *text) //发送号码 发送内容,字母或数字
{
uchar i=Sendwaits,j=Sendwaits;
uchar *p;
SendString("AT+CMGS="); //信息发送指令 AT+CMGS=//
///////////////////////////////
SendASC('"');
SendString(dialnum); //手机号码的引号丢了!!!!!!!!! 已经加上
SendASC('"');
////////////////////////////////////
SendASC('\r'); //发送回车指令//
RsPoint=0; //清空接收缓冲区
//delayms_1000ms();
while(i--)
{
delayms_100ms();
p=mystrstr(RsBuf,">");//">"
if(p!=NULL) //如果接受到 > 发送text
{
///////Get">"////////////////////////////
SendString(text);
RsPoint=0; //清空接收缓冲区
SendString("\x1a\r");//'\x1a'结束符(相当CTRL+Z) '\r'回车符
//delayms_100ms();
while(j--)
{
delayms_100ms();
p=mystrstr(RsBuf,"OK");
if(p!= NULL )
{
//发送成功
return 1;
}
delayms_1000ms();
}
}
//else lcd_disp_str("Transmit failure",1);
}
return 0;
}
/***********************字符串查找********************************
*功 能: 查找字符串
*形 参: char *s, char *t ;在s中查找t
*返 回 值: s_temp(t在s中的位置)成功 0 (失败 )
*备 注:
*****************************************************************/
char *mystrstr(char *s, char *t)
{
char *s_temp; /*the s_temp point to the s*/
char *m_temp; /*the mv_tmp used to move in the loop*/
char *t_temp; /*point to the pattern string*/
if ((s == NULL )|| (t == NULL)) return NULL;
/*s_temp point to the s string*/
for (s_temp = s; *s_temp != '\0'; s_temp++)
{
/*the move_tmp used for pattern loop*/
m_temp = s_temp;
/*the pattern string loop from head every time*/
for (t_temp = t; *t_temp == *m_temp; t_temp++, m_temp++);
/*if at the tail of the pattern string return s_tmp*/
if (*t_temp == '\0') return s_temp;
}
return NULL;
}
// 通讯中断接收程序 中断函数无返回值
void uart_rx(void) interrupt 4 using 3 //放在这里 和放在main()里面是一样的
{
EA=0;
if((RsPoint<RsBuf_N)&&RI) //必须判断RI是否为1
//if(RI)
{
RI=0;
RsBuf[RsPoint++]=SBUF;
//RsBuf[RsPoint]=0x00; //将下一个数据清零
//SendASC(RsBuf[RsPoint-1]);
//lcd_disp_str(RsBuf ,2);
}
EA=1;
}
没有合适的资源?快使用搜索试试~ 我知道了~
STC89C52发送一条中文短信.zip
共25个文件
bak:7个
lst:3个
obj:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 15 浏览量
2023-11-13
13:51:52
上传
评论
收藏 54KB ZIP 举报
温馨提示
源码参考使用
资源推荐
资源详情
资源评论
收起资源包目录
STC89C52发送一条中文短信.zip (25个子文件)
STC89C52发送一条中文短信
tc35.M51 15KB
tc35.opt.bak 1KB
tc35.Uv2.bak 2KB
tc35_uvproj.bak 13KB
main.OBJ 14KB
tc35 12KB
tc35_Uv2.Bak 2KB
TC35.C 6KB
main.LST 3KB
tc35.hex 3KB
tc35.plg 762B
tc35.OBJ 12KB
uart.LST 3KB
tc35.uvgui_Administrator.bak 70KB
tc35.LST 4KB
delay.h 306B
tc35.uvproj 13KB
uart.c 730B
tc35_uvopt.bak 6KB
tc35.lnp 40B
uart.OBJ 3KB
main.c 1KB
tc35_Opt.Bak 1KB
tc35.uvopt 6KB
tc35.uvgui.Administrator 70KB
共 25 条
- 1
资源评论
等天晴i
- 粉丝: 3426
- 资源: 10万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功