/*********************************发送换行回车函数*******************************/
void Send_LR(void)
{
Send_Hex(0x0D);
Send_Hex(0x0A);
}
/*************************************清除串口缓存数据函数*************************************/
void CLR_Buf1(void)
{
unsigned int k;
for(k=0;k<Buf1_Max;k++) //将缓存内容清零
{
Buf_First_Serial[k] = 0x30;
}
First_Int = 0; //接收字符串的起始存储位置
}
/*****************************************发AT指令函数****************************************/
void Second_AT_Command(unsigned char *b)
{
ES = 0; //关串口中断
for (b; *b!='\0';b++)
{
SBUF = *b;
while(TI!=1); //等待发送完成
TI = 0; //清除发送中断标志位
}
ES = 1; //开串口中断
Send_LR();
}
/**************************************等待模块注册成功函数***********************************/
void Wait_CREG(void)
{
unsigned char i;
unsigned int k;
i = 0;
CLR_Buf1();
while(i == 0)
{
CLR_Buf1();
Send_ASCII("AT+CREG?");
Send_LR();
delay_ms(1000);
for(k=0;k<Buf1_Max;k++)
{
if(Buf_First_Serial[k] == ':')
{
if((Buf_First_Serial[k+4] == '1')||(Buf_First_Serial[k+4] == '5'))
{
i = 1;
break;
}
}
}
}
}
/*******************************************拨打电话函数***************************************/
void ATD_num(void)
{
unsigned char i;
Send_ASCII("ATD"); //拨打电话指令
//语音电话相关指令:ATA是接电话指令,ATH是挂电话指令
for(i=0;i<11;i++)
{
Send_Hex(Phone_num[i]);
}
Send_ASCII(";");
//手机号后面要加分号
Send_LR(); //发送换行回车
delay_ms(1000);
}
/*******************************************挂断电话函数***************************************/
void ATH_num(void)
{
Send_ASCII("ATH"); //拨打电话指令
Send_LR(); //发送换行回车
delay_ms(1000);
}
/************************************** 串口初始化 *******************************************/
void Init_Com(void)
{
SCON = 0x50; //设置串口工作方式为1
TMOD = 0x20; //定时器T1工作方式2
TH1 = 0xFD; //定时器初值:9600波特率
TL1 = 0XFD;
TR1 = 1; //启动定时器1
EA = 1; //打开总中断
ES = 1; //打开串口中断
}
/**************************************发送字符(十六进制)函数*********************************/
void Send_Hex(unsigned char c)
{
ES = 0; //关串口中断
SBUF = c;
while(TI!=1); //等待发送完成
TI = 0; //清除发送中断标志位
ES = 1; //开串口中断
}
/***************************************发送字符(ASCII)函数**********************************/
void Send_ASCII(unsigned char *b)
{
ES = 0; //关串口中断
for (b; *b!='\0';b++)
{
SBUF = *b;
while(TI!=1); //等待发送完成
TI = 0; //清除发送中断标志位
}
ES = 1; //开串口中断
}
/*****************************************对模块进行初始化*************************************/
void Init_Module(void)
{
Second_AT_Command("ATE0"); //取消回显
delay_ms(500);
Second_AT_Command("AT+CNMI=2,2"); //新短信到来时直接通过串口输出不做存储
delay_ms(500);
Second_AT_Command("AT+CMGF=1"); //TEXT模式
delay_ms(500);
CLR_Buf1();
}
void Send_Message() //发送短信
{
unsigned char i;
Send_ASCII("AT+CMGS=\"+86");
for(i = 0;i < 11;i++)
{
Send_Hex(Phone_num[i]);
}
Send_ASCII("\"");
Send_LR();
delay_ms(1000);
Send_ASCII(msg); //发送内容
Send_Hex(0x1A); //发送十六进制数1A
Send_LR();
delay_ms(5000);
LCD_Clear();
}
void ATA_num() //接听电话
{
Send_ASCII("ATA");
Send_LR() ;
delay_ms(1000);
}
AT指令使用函数
最新推荐文章于 2024-04-12 09:33:37 发布