c语言设置一个8位缓存区程序,求用单片机AT89C51控制TC35i发送短信的C语言程序!急!? 爱问知识人...

smc。c:

// 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

");

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

"); //初始化

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

"); //设置波特率

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

"); //设置短消息格式

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 Sendsms(uchar *q)//向指定的号码发送短消息

{

ulong i=0x1ffff;

rcount=0;//数据缓冲区指针回0

Sendcmd("AT CMGS=");

Sendchar('"');

Sendcmd(numbuff);

Sendchar('"');

Sendchar(0x0D);

Sendchar(0x0A);

while(rbuff[rcount-2]!='>')

{

i--;

if(i==0)

{

rcount=0;

receive_ok=0;

return; //超时返回

}

}

Sendcmd(q);

Sendchar(0x1A); //发送短信

Sendchar(0x0D);

Sendchar(0x0A);

receive_ok=0;

i=0x5fffff; //发送短消息超时处理发送等待5s比较安全

while(receive_ok==0)

{

i--;

if(i==0) //超时还未响应则返回

{

rcount=0;

receive_ok=0;

return;

}

}

receive_ok=0;

rcount=0;

}

smc。

h

// Header: tc35头文件

// File Name: SMS。H

// Author: Yoran

// Date: 2008/05/12

#ifndef __SMS_H__

#define __SMS_H__

#include

#include

extern uchar idata rbuff[];

extern uchar data databuff[];

extern ucharrcount;

extern bittc35_init_ok;

extern bitreceive_ok;

extern bit new_sms;

void Init_tc35(void);//判断是否连接TC35

void Sendcmd(uchar *cmd);//发送AT命令

void Sendchar(uchar c);//发送一个字符

void Sendsms(uchar *q);//向指定的号码发送短消息

#endif

main。

c

// Header: XC-TC35短信猫测试程序

// File Name: 发送英文短信。C

// Author: 兴创科技

// P2^4---//发短信

#include

#include

#include "hardware。

h"

#include "sms。h"

#include "sms。c"

//LCD Start

uchar code table[]="Welcome。。。。

" ;

uchar code table1[]="No:1 is ON" ;

uchar code table2[]="No:2 is ON" ;

uchar code table3[]="No:1 2 are ON" ;

uchar i;

//以下三个是定义LCD的引脚

sbit lcden=P2^2; //6

sbit lcdwrite=P2^1; //5

sbit lcdrs=P2^0;//4

//lcd的写指令

void write_com(uchar com)

{

lcdrs=0;

lcden=0;

P0=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

//lcd的写数据

void write_data(uchar da)

{

lcdrs=1;

lcden=0;

P0=da;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

//初始化

void init()

{

lcdwrite=0;

lcden=0;

write_com(0x38); //16*2显示,5*7点阵,8位数据

write_com(0x0c);//显示开,关光标

write_com(0x06); //移动光标

write_com(0x01);//清除LCD的显示内容

}

//LCD END

uchar idata rbuff[110];//串口接收数据缓存区

uchar numbuff[]="13217832221"; //此处修改为需要接收短信的手机号码,注意要定义为字符串( )

uchar databuff[]="000000"; //数据缓存区,注意要定义为字符串( )

ucharrcount;//串口接收数据指针

bittc35_init_ok;//TC35注册成功初始化完成标志

bitreceive_ok;//收到模块“ok”标志

bit send_error;

bit send_ok;

void initUart(void)

{ //RXD=1;

//TXD=1;

TMOD=0x20;//T1工作方式2,8位自动重装

SCON=0x40;//串行口工作方式1,8位UTRA

TH1=0xfa;

TL1=0xfa;//波特率发生器,波特率为4800

REN=1; //允许串行接收

TR1=1;//开波特率发生器T1

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

EA=1;//开总中断

//R=1;

//T=1;

}

void RECEIVE_DATA(void) interrupt 4 //接收tC35发送的数据并缓存

{

ES=0;

if(RI)

{

rbuff[rcount ]=SBUF;

RI=0;

}

//判断是否接收完毕

if((rbuff[rcount-1]==0x0a)&&(rbuff[rcount-2]==0x0d)&&(rbuff[rcount-3]==0x4b)&&(rbuff[rcount-4]==0x4f))

{//换行 //回车

receive_ok=1;

}

//判断是否为新短消息指示

if((rbuff[rcount-14]=='C')&&(rbuff[rcount-13]=='M')&&(rbuff[rcount-12]=='T')&&(rbuff[rcount-11]=='I'))

{ //换行

new_sms=1;

}

else new_sms=0;

if(((rbuff[rcount-17]=='C')&&(rbuff[rcount-16]=='M')&&(rbuff[rcount-15]=='G')&&(rbuff[rcount-14]=='S')&&(rbuff[rcount-4]==0x4f)&&(rbuff[rcount-3]==0x4b)&&(rbuff[rcount-2]==0x0d)&&(rbuff[rcount-1]==0x0a))|((rbuff[rcount-16]=='C')&&(rbuff[rcount-15]=='M')&&(rbuff[rcount-14]=='G')&&(rbuff[rcount-13]=='S')&&(rbuff[rcount-4]==0x4f)&&(rbuff[rcount-3]==0x4b)&&(rbuff[rcount-2]==0x0d)&&(rbuff[rcount-1]==0x0a)))

{ //换行

send_ok=1;

}

else send_ok=0;

if((rbuff[rcount-7]=='E')&&(rbuff[rcount-6]=='R')&&(rbuff[rcount-5]=='R')&&(rbuff[rcount-4]=='O')&&(rbuff[rcount-3]=='R'))

{ //换行

send_error=1;

}

else send_error=0;

if(rcount>109)rcount=0;

ES=1;

}

void keyboard()

{

if(!(K1&K2&K3&K4))

{

delay(10);

if(!(K1&K2&K3&K4))

{

if(K1==0)

{

Sendcmd("ATD13217832221;

"); //按键1拨打电话测试语音通话

}

if(K3==0&&K4==0)

{

Sendsms("The Light No:1 and 2 are ON!"); //发送英文短信

write_com(0x01);

delay(30);

for(i=0;i15)

{

times=0;

delay(1000);

delay(500);

delay(1000);

delay(4000);delay(4000);delay(4000);

}

}

if(tc35_init_ok)

{

BEEP=0; //初始化成功鸣叫一声

delay(2000);

BEEP=1;

delay(2000);

BEEP=0;

}

while(1)

{

keyboard();

}

}。

全部

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值