#include <reg51.h>
#include <intrins.h>
#include <string.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
uchar i=0,j=0;
uchar code SMS_send[]="AT+CMGS=21\r\n"; //dup长度
uchar code CMGF0[]="AT+CMGF=0\r\n";//发中文短信息
uchar code Sms2_Pdu[]="0891683108709605F011000D91683156790973F50008A7067740706B4E86";
sbit k1=P1^0;
sbit led0=P0^1;
sbit led1=P0^2;
#define MAXCHAR 81 //最大长度
uchar aa[MAXCHAR];
void clearBuff()
{
for(j=0;j<MAXCHAR;j++)
{
aa[j]=0x00;
}
j=0;
}
void init()
{
PCON |= 0x80;//使能波特率倍速位SMOD
SCON = 0x50;//8位数据,可变波特率
//AUXR &= 0xBF;//定时器1时钟为Fosc/12,即12T
//AUXR &= 0xFE;//串口1选择定时器1为波特率发生器
TMOD &= 0x0F;//清除定时器1模式位
TMOD |= 0x20;//设定定时器1为8位自动重装方式
TL1 = 0xFE;//设定定时初值
TH1 = 0xFE;
TR1=1;
ES=1;
EA=1;
}
void Print_Char(uchar ch)//发送单个字符
{
clearBuff();
SBUF=ch; //送入缓冲区
while(TI!=1); //等待发送完毕
TI=0; //软件清零
}
/***********************************************************
函数名称:Print_Str
函数功能:发送字符串
入口参数:*str 出口参数:无
***********************************************************/
void Print_Str(uchar *str)//发送字符串
{
clearBuff();
while(*str!='\0')
{
Print_Char(*str);
str++;
}
}
void delay(uchar n) //延迟0.01s
{
unsigned char a,b,c;
for(c=0;c<n;c++)
{
for(b=249;b>0;b--)
for(a=17;a>0;a--);
}
}
void main()
{
init();
led0=0;
led1=0;
while(1)
{
if(k1==0)
{
delay(5);
if(k1==0)
{
i=1;
led0=1;
while(!k1);
break;
}
}
}
led0=0;
while(1)
{
if(i==1)
{
led1=1;
Print_Str(CMGF0); //发送中文短信
delay(100);
Print_Str(SMS_send); //发送中文短信
delay(100);
Print_Str(Sms2_Pdu); //发短信内容
delay(100);
Print_Char(0x1A); //发送结束符号
delay(500);
i=0;
}
if(i==0)
break;
}
led1=0;
}
晶振用的是12M,GSM的波特率为38400.不知道错哪了,怎么也调不出来
#include <intrins.h>
#include <string.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
uchar i=0,j=0;
uchar code SMS_send[]="AT+CMGS=21\r\n"; //dup长度
uchar code CMGF0[]="AT+CMGF=0\r\n";//发中文短信息
uchar code Sms2_Pdu[]="0891683108709605F011000D91683156790973F50008A7067740706B4E86";
sbit k1=P1^0;
sbit led0=P0^1;
sbit led1=P0^2;
#define MAXCHAR 81 //最大长度
uchar aa[MAXCHAR];
void clearBuff()
{
for(j=0;j<MAXCHAR;j++)
{
aa[j]=0x00;
}
j=0;
}
void init()
{
PCON |= 0x80;//使能波特率倍速位SMOD
SCON = 0x50;//8位数据,可变波特率
//AUXR &= 0xBF;//定时器1时钟为Fosc/12,即12T
//AUXR &= 0xFE;//串口1选择定时器1为波特率发生器
TMOD &= 0x0F;//清除定时器1模式位
TMOD |= 0x20;//设定定时器1为8位自动重装方式
TL1 = 0xFE;//设定定时初值
TH1 = 0xFE;
TR1=1;
ES=1;
EA=1;
}
void Print_Char(uchar ch)//发送单个字符
{
clearBuff();
SBUF=ch; //送入缓冲区
while(TI!=1); //等待发送完毕
TI=0; //软件清零
}
/***********************************************************
函数名称:Print_Str
函数功能:发送字符串
入口参数:*str 出口参数:无
***********************************************************/
void Print_Str(uchar *str)//发送字符串
{
clearBuff();
while(*str!='\0')
{
Print_Char(*str);
str++;
}
}
void delay(uchar n) //延迟0.01s
{
unsigned char a,b,c;
for(c=0;c<n;c++)
{
for(b=249;b>0;b--)
for(a=17;a>0;a--);
}
}
void main()
{
init();
led0=0;
led1=0;
while(1)
{
if(k1==0)
{
delay(5);
if(k1==0)
{
i=1;
led0=1;
while(!k1);
break;
}
}
}
led0=0;
while(1)
{
if(i==1)
{
led1=1;
Print_Str(CMGF0); //发送中文短信
delay(100);
Print_Str(SMS_send); //发送中文短信
delay(100);
Print_Str(Sms2_Pdu); //发短信内容
delay(100);
Print_Char(0x1A); //发送结束符号
delay(500);
i=0;
}
if(i==0)
break;
}
led1=0;
}
晶振用的是12M,GSM的波特率为38400.不知道错哪了,怎么也调不出来