📄 gsm.c
字号:
Serial1_Inter_Open();
}
void clear_database(void)
{
UINT i,j;
for(i=0;i<8;i++)
for(j=0;j<256;j++)
PHONE_number[i][j][0]=0;
}
void rec_success_for_PC(void) //告诉PC接受数据成功,可以发下一个了
{
UCHAR data lenth,commandcode;
commandcode =0x13;
lenth=1; //数据长度
TxBuf1[0]=0x32;
send_to_module1(commandcode,lenth);
}
void rec_err_for_PC(void) //告诉PC接受数据失败,重发所有
{
UCHAR data lenth,commandcode;
commandcode =0x13;
lenth=1; //数据长度
TxBuf1[0]=0x33;
send_to_module1(commandcode,lenth);
}
//=======================================
void led1_open()
{ led1=1; }
void led1_close()
{ led1=0; }
void led2_open()
{ led2=1; }
void led2_close()
{ led2=0; }
void led3_open()
{
led3=1;
}
void led3_close()
{
led3=0;
}
void laba_close()
{
bell=1;
}
void laba_ring_1_time()
{
UCHAR data delay;
bell=0;
for(delay=0;delay<60;delay++)
Delay10ms();
bell=1;
}
void laba_ring_3_times()
{
UCHAR data times,delay;
for(times=0;times<3;times++)
{
bell=0;
for(delay=0;delay<30;delay++)
Delay10ms();
bell=1;
for(delay=0;delay<30;delay++)
Delay10ms();
}
}
//===================================
//***************延时1秒***********
void Delay_1S(void)
{
UCHAR idata i;
for(i=0;i<100;i++) Delay10ms();
//WDT_RST();
}
//=================================
//********延时子程序*********
//*********************************
void Delay10ms()
{
UINT idata i;
for(i=0;i<10000;i++);
}
void start_timer0(void)
{
timer0_counter=0;
CKCON &= 0xF7; //设置定时器0为系统时钟12分频T0M=0
TH0=0x00;
TL0=0x00;
TMOD = 0x01; //设置定时器0为模式1(定时器1为模式0)
TCON &= 0xDF; //清定时器0溢出中断标志TF0
ET0=1; //允许定时器0溢出中断
TCON |=0x10; //开启定时器0
}
void close_timer0(void)
{
timer0_counter=0;
TCON &=0xEF;
ET0=0;
}
void time0(void) interrupt 1
{
UCHAR idata i; //发生error
if(timer0_counter++>250)
deal_with_error();
// RSTSRC |= 0x02; // 重起
}
void deal_with_error(void)
{
led1_open();
led2_open();
led3_open();
while(1);
}
//*********************************sms函数****************************************
void start_GSM(void)
{
UINT idata i;
// led2_close();
led2_open();
for(i=0;i<5;i++) Delay_1S();
power_down();
start_tc35();
// led2_open();
Delay_1S();
for(i=0;i<10;i++) Delay_1S();
AT_SEND();
Delay_1S();
Signal_test();
Delay_1S();
AT_cmgf();
Delay_1S();
//{
//AT_cmgs();
//SEND_sms(49);
//}
led2_close();
}
void start_tc35(void)
{
Delay_1S();
Delay_1S();
Delay_1S();
Delay_1S();
Delay_1S();
Delay_1S();
Delay_1S();
Delay_1S();
Delay_1S();
IGT=0;
Delay_1S();
IGT=1;
}
void AT_SEND(void)
{
UCHAR idata i,error_counter;
error_counter=0;
while(1)
{
TI0=0;
RI0=0;
for(i=0;i<5;i++)
rec[i]=0x00;
start_timer0();
for(i=0;i<3;i++)
{
SBUF0=GSMCommand0[i];
while(!TI0);
TI0=0;
// while(!RI0);//不接收返回的数据
// rec[i]=SBUF0;
// RI0=0;
}
// RI0=0;
for(i=0;i<9;i++)
{
while(!RI0);
rec[i]=SBUF0;
RI0=0;
}
close_timer0();
if(rec[5]=='O'&&rec[6]=='K') break;
else if(error_counter++<10) Delay_1S();
else deal_with_error();
}
}
//***********Signal_test函数开始**********
void Signal_test(void)
{
UCHAR idata i,error_counter;
error_counter=0;
while(1) // AT+CSQ
{
TI0=0;
RI0=0;
start_timer0();
for(i=0;i<7;i++)
{
SBUF0 = GSMCommand1[i];
while(!TI0);
TI0 = 0;
// while(!RI0);
// rec[i] = SBUF0;
// RI0 = 0;
}
for(i=0;i<28;i++) //only receive part data (10)
{
while(!RI0);
rec[i] = SBUF0;
RI0 = 0;
}
close_timer0();
if(rec[15]!= '9'&& rec[16]!= '9')break;
else if(error_counter++<10) Delay_1S();
else deal_with_error();
}
Delay_1S();
RI0=0;
}
//***********Signal_test 函数结束*********
//***********AT+cmgf函数开始*************
void AT_cmgf(void)
{
UCHAR idata i;
while(1) // AT+CSQ
{
TI0=0;
RI0=0;
for(i=0;i<10;i++)
{
SBUF0 = GSMCommand2[i];
while(!TI0); TI0 = 0;
// while(!RI0);
// rec[i] = SBUF0;
// RI0 = 0;
}
/*
for(i=0;i<16;i++)
{
while(!RI0);
rec[i] = SBUF0;
RI0 = 0;
}
if(rec[12]== 'O'&& rec[13]== 'K')break;
*/
break;
Delay_1S();
}
Delay_1S();
RI0=0;
TI0=0;
}
//***********AT+cmgf函数结束*************
//发送完CMGS命令后会收到16个数据,数据的最后两个字节是3E和20时表示正常。
//***********AT+cmgs函数开始*************
void AT_cmgs(void)
{
UCHAR idata i;
while(1) // AT+cmgs
{
TI0=0;
RI0=0;
for(i=0;i<12;i++)
{
SBUF0 = GSMCommand3[i];
while(!TI0); TI0 = 0;
// while(!RI0);
// rec[i] = SBUF0;
// RI0 = 0;
}
for(i=0;i<16;i++)
{
while(!RI0);
rec[i] = SBUF0;
RI0 = 0;
}
if(rec[14]== 0x3E&& rec[15]== 0x20)
break;
// Delay_1S();
}
// Delay_1S();
for(i=0;i<50;i++); //延时一段时间
RI0=0;
TI0=0;
}
//***********AT+cmgs函数结束*************
//========sms有关的函数结束===================
void power_down(void)
{
PD=1; //bell ring
Delay_1S();
Delay_1S();
Delay_1S();
Delay_1S();
PD=0;
}
//发送GSMhead[],Phone_number,GSM_set[],GSM_sms[],0x1A;
//***********SEND_sms函数开始*************
void SEND_sms(UCHAR idata FID)
{
UCHAR idata i,temp;
// while(1)
{
TI0=0;
RI0=0;
for(i=0;i<12;i++)
{
SBUF0 = GSMhead[i];
while(!TI0); TI0 = 0;
}
for(i=0;i<12;i++)
{
// SBUF0 = PHONE_number[i];
SBUF0 = PHONE_number[0][FID][i+1];
while(!TI0);
TI0 = 0;
}
for(i=0;i<6;i++)
{
SBUF0 = GSM_set[i];
while(!TI0); TI0 = 0;
}
for(i=0;i<26;i++)
{
SBUF0 = GSM_sms[i];
while(!TI0); TI0 = 0;
}
SBUF0=0x1A;
while(!TI0); TI0 = 0; //发送信息结束
/*
for(i=0;i<75;i++)
{
while(!RI0);
rec[i] = SBUF0;
RI0 = 0;
}
if(rec[72]== 'O'&& rec[73]== 'K')break;
*/ Delay_1S();
}
// Delay_1S();
for(i=0;i<255;i++); //延时一段时间
RI0=0;
TI0=0;
}
//***********SEND_sms函数结束*************
//========sms有关的函数结束===================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -