include <STC_NEW_8051.H>
#include <string.h>
#include <intrins.h>
#define S2RI 0x01
#define S2
ti 0x02
#define uchar unsigned char
#define uint unsigned int
#define len 52
unsigned int i;//全局用 I
uchar thz=0; //通话中标志位
unsigned char flag1=0;
unsigned char flag2=0;
void printf1 (uchar *p);
void printf2 (uchar *p);
void UART_1SendOneByte(unsigned char c);
void UART_2SendOneByte(unsigned char c);
uchar usart1buf[len]={0};
uchar usart2buf[len]={0};
void delay_ms(unsigned int i) // -0.018084490741us
{
while(i--)
{
unsigned char a,b;
for(b=18;b>0;b--)
for(a=152;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
}
////////////////////////////////////////////////////
/////////////////GSM模块测试连接函数////////////////
//测试指令:AT //
//软件延时:1000ms //
//返回值:1 连接正常 //
//返回值:0 其他错误 //
////////////////////////////////////////////////////
uchar GSMinit(void)
{
flag2=0;
for(i=0;i<len;i++)
{
usart2buf[i]=0;
}
printf2("AT&F
");//设置模块波特率115200
delay_ms(300);
flag2=0;//复位缓冲
printf2("AT
");
delay_ms(1000);
UART_1SendOneByte(usart2buf[6]);
UART_1SendOneByte(usart2buf[7]);
if(usart2buf[6]=='O' && usart2buf[7]=='K')// 如果成功
{
flag2=0;
IE2&=0xfe;
return 1;
}
else
{
flag2=0;
return 0;
}
}
/**************** 串口初始化****************/
//串口1 定时器 11.0592 115200
//串口2 独立波特率发生器 11.0592 115200
void InitUART(void)
{
AUXR = AUXR|0x40 ;
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
EA = 1;
// ES = 1;
TR1 = 1;
AUXR |= 0x08; //使能波特率倍速位S2SMOD
S2CON = 0x50; //8位数据,可变波特率
BRT = 0xFA; //设定独立波特率发生器重装值
AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
AUXR |= 0x10; //启动独立波特率发生器
IE2 =0x01;
}
/*****************主函数******************/
void main(void)
{
InitUART();
while(GSMinit()!=1);//模块连接错误 始终尝试连接,直到连接成功后往下走
P0=0; //板子P0口全部置0 代表初始化通过
printf2("AT+CMGF=1
"); //配置英文模式
delay_ms(500);
printf2("AT+CSCS="); //配置字节集
UART_2SendOneByte(0x22);
printf2("GSM");
UART_2SendOneByte(0x22);
printf2("
");
delay_ms(500);
printf2("AT+CMGS=");
UART_2SendOneByte(0x22);
printf2("13921283715"); //发送号码,各位学生在测试的时候 注意改成自己的号码
UART_2SendOneByte(0x22);
printf2("
");
delay_ms(500);
printf2("hello"); //发送内容
delay_ms(500);
UART_2SendOneByte(0x1a);
while(1);//发送成功在此等待
}
/************串口中断函数************/
void UART_1Interrupt(void) interrupt 4
{
if(RI==1)
{
RI=0;
usart1buf[flag1++]=SBUF;
}
}
void UART_2Interrupt(void) interrupt 8
{
if(S2CON&S2RI)
{
S2CON&=~S2RI;
usart2buf[flag2++]=S2BUF;
}
}
/****************串口1发送一个字节****************/
void UART_1SendOneByte(unsigned char c)
{
SBUF = c;
while(!TI);
TI = 0;
}
/****************串口2发送一个字节****************/
void UART_2SendOneByte(unsigned char c)
{
S2BUF = c;
while(!(S2CON&S2TI));
S2CON&=~S2TI; //S2TI=0
}
void printf1 (uchar *p)
{
while(*p!=' ')
{
UART_1SendOneByte(*p++);
}
}
void printf2 (uchar *p)
{
while(*p!=' ')
{
UART_2SendOneByte(*p++);
}
}
一周热门 更多>