TC35控制继电器
源代码在线查看: tc35+
// Header: tc35操作函数
// File Name: TC35.C
// Author: 兴创科技
#include "hardware.h"
#include "SMS.h"
extern uchar numbuff[];
void delay(uint m) //延时m*0.2ms
{
uchar n;
for(;m>0;m--)
for(n=100;n>0;n--);
}
void Sendcmd(uchar *p) //发送AT命令
{
while(*p)
{
SBUF=*(p++);
while(TI==0);
TI=0;
}
}
void Sendchar(uchar c) //发送一个字符
{
TI=0;
SBUF=c;
while(TI==0);
TI=0;
}
void Init_tc35(void) //判断是否连接TC35
{
uint i=0xffff;
rcount=0;
receive_ok=0;
Sendcmd("AT\r\n");
while(receive_ok==0)
{
i--;
if(i==0) //超时还未响应则返回
{
rcount=0;
receive_ok=0;
return;
}
}
receive_ok=0;
rcount=0;
delay(4000);
i=0xffff;
Sendcmd("AT&F\r\n");
while(receive_ok==0)
{
i--;
if(i==0) //超时还未响应则返回
{
rcount=0;
receive_ok=0;
return;
}
}
receive_ok=0;
rcount=0;
delay(4000);
i=0xffff;
Sendcmd("AT+IPR=4800\r\n"); //设置短消息格式
while(receive_ok==0)
{
i--;
if(i==0) //超时还未响应则返回
{
rcount=0;
receive_ok=0;
return;
}
}
receive_ok=0;
rcount=0;
delay(4000);
i=0xffff;
Sendcmd("AT+CMGF=1\r\n"); //设置短消息格式
while(receive_ok==0)
{
i--;
if(i==0) //超时还未响应则返回
{
rcount=0;
receive_ok=0;
return;
}
}
receive_ok=0;
rcount=0;
delay(4000);
i=0xffff;
Sendcmd("AT+CSCS="); //设置字符集为“GSM”
Sendchar('"');
Sendcmd("GSM");
Sendchar('"');
Sendchar(0x0D);
Sendchar(0x0A);
while(receive_ok==0)
{
i--;
if(i==0) //超时还未响应则返回
{
rcount=0;
receive_ok=0;
return;
}
}
receive_ok=0;
rcount=0;
tc35_init_ok=1; //全部初始化完毕置标志
}
//void Readsms(uchar index) //读取指定索引号的短信内容
void Readsms1() //读取指定索引号的短信内容
{
ulong i=0x1ffff; //这个值不能再小
bit es;
uchar j,k;
receive_ok=0;
rcount=0;
Sendcmd("AT+CMGR=1");
//Sendchar(index+0x30);
Sendchar(0x0D);
// receive_ok=0;
while(receive_ok==0)
{
i--;
if(i==0) //超时还未响应则返回
{
rcount=0;
receive_ok=0;
return;
}
}
receive_ok=0;
// rcount=0;
es=ES;
ES=0; //关闭中断
k=rcount-9;
for(j=6;j>0;j--)
{
databuff[j-1]=rbuff[k--]; //读短信内容到databuff
}
rcount=0;
receive_ok=0;
ES=es; //恢复中断
}
void Readsms2() //读取指定索引号的短信内容
{
ulong i=0x1ffff; //这个值不能再小
bit es;
uchar j,k;
receive_ok=0;
rcount=0;
Sendcmd("AT+CMGR=2");
//Sendchar(index+0x30);
Sendchar(0x0D);
// receive_ok=0;
while(receive_ok==0)
{
i--;
if(i==0) //超时还未响应则返回
{
rcount=0;
receive_ok=0;
return;
}
}
receive_ok=0;
// rcount=0;
es=ES;
ES=0; //关闭中断
k=rcount-9;
for(j=6;j>0;j--)
{
databuff[j-1]=rbuff[k--]; //读短信内容到databuff
}
rcount=0;
receive_ok=0;
ES=es; //恢复中断
}
void Delsms() //删除指定索引号的短信
{
ulong i=0x5fffff; //删除等待5秒,有的时候删除短信很慢
receive_ok=0;
rcount=0;
Sendcmd("AT+CMGD=1");
//Sendchar(index+0x30);
Sendchar(0x0D);
while(receive_ok==0)
{
i--;
if(i==0) //超时还未响应则返回
{
rcount=0;
receive_ok=0;
return;
}
}
receive_ok=0;
rcount=0;
}