⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 西门子无线手机模块通信at命令.c

📁 西门子无线手机模块AT COMMAND 用于无线数传(C51MCU)
💻 C
📖 第 1 页 / 共 3 页
字号:
/*******************
短信电压检测仪通信程序(省公司及天津)
完成于2002年11月
修改于2003年08月  By Xiayc
*******************/
#include<reg52.h>
#include<intrins.h>
#include<math.h>
#include<ctype.h>   
#define uchar unsigned char
#define uint unsigned int

sbit L1=P1^0;
sbit L2=P1^1;
sbit L3=P1^2;
sbit IGT=P1^3;
sbit A3=P1^4;
sbit A2=P1^5;
sbit A1=P1^6;
sbit A0=P1^7;

sbit in0=P3^2;
sbit MCU_XOF=P3^3;
sbit POWER_DOWN=P3^4;
sbit WD=P3^5;
bit Recv_bit;
bit No_bit;
bit Statu_Bit;
bit Error_bit;

uchar idata Station;
uchar idata Short_Center_Code[5];
uchar idata Contral_Center_Code[5];
uchar idata Rating[2];
uchar idata Up_Rating;
uchar idata Down_Rating;
uchar idata Timeout_Set;
uchar idata Power_Lost_Code[5];
uchar idata R_S_Data[114];

uchar idata Recv[12];
uchar idata Send[7];
uchar idata Chk_Code;
uchar idata Zn;
uint idata Day,DB,Month;
uint idata Message_Capability;   //新信息记录号,短信息容量
uchar idata Address_H,Address_L;
uchar idata Sta_No;
uchar idata Message_No;
uchar idata Message_NoB;
//uchar idata Message_NoC;
bit Send_Message();
void Clear_R_S(void);
/************************/
void ini()
{
	SCON=0x50;
	TMOD=0x20;
	TH1=0xfd;
	TR1=1;   //定时器1开始工作
        ET1=0;   //定时器1中断使能

        IT0=1;   //电平由高到底跳变时触发中断0

        EX0=0;

        ES=0;    //串行口中断使能

        EA=1;    // CPU开中断
}
/*************************/
void Delay_2000ms()
{
    int i,j;
    for(j=0;j<20;j++)
      for(i=0;i<20000;i++)
      {
          WD=0;
          WD=1;
      }

}

void Delay_1000ms()
{
    int i,j;
    for(j=0;j<20;j++)
      for(i=0;i<10000;i++)
      {
          WD=0;
          WD=1;
      }
}

void Delay_100ms()
{
    int i,j;
    for(j=0;j<20;j++)
      for(i=0;i<1500;i++);
      {
          WD=0;
          WD=1;
      }
}
/************************/

void Send_Char(unsigned char c)
{
        TI=0;
  	SBUF=c;
  	while(TI==0);
}
/***********************
unsigned char Recv_Char()
{
	unsigned char c;
 	RI=0;
 	while(RI==0);
	c=SBUF;
	return(c);
}

***********************/
unsigned char Recv_Data()
{
	unsigned char c;
        unsigned long i;
        Recv_bit=0;
        RI=0;
        for(i=0;i<200000;i++)
        {
          WD=0;
          WD=1;
 	  if(RI==1)
          {
             Recv_bit=1;
	     c=SBUF;
	     return(c);
          }
          else
          {
             Recv_bit=0;
          }
        }
}
/***********************/
bit Power_Lost_Set()//写停电报警号码0xa2
{
	uchar Buf[8];
	uchar c;
	uint i,j;
        for(i=0;i<5;i++)
        {
               Power_Lost_Code[i]=R_S_Data[i+3];
        }
        for(i=0;i<5;i++)
	{
	 Buf[i]=Power_Lost_Code[i];
	}
	for(i=0;i<3;i++)
	{
	 Buf[i+5]=0xff;
	}

	j=0;
	Zn=0x30;
	Chk_Code=0x0f;
	Send[0]=0x7a;
	Send[1]=0x55;
        Send[3]=0x1f;
        Send[4]=0xf0;
        Send[5]=5;
        Send[6]=0xff;
Lab1:
        Send[2]=Zn;
	for(i=0;i<7;i++)
	{
	 Send_Char(Send[i]);
	}
	c=Send[0];
	for(i=1;i<7;i++)
	{
	 c=c^Send[i];
	}
	c=0x0f&c;
	Chk_Code=Chk_Code&0xf0;
	Chk_Code=Chk_Code|c;
	Send_Char(Chk_Code);
	         //准备接收
	for(i=0;i<12;i++)
	{
	 c=Recv_Data();
         if(Recv_bit==0)return(0);
         Recv[i]=c;
	}
	c=Recv[11]&0xf0;
	if(c!=0x10)goto Lab1;
	Zn=Recv[2];
	c=Recv[0];
	for(i=1;i<11;i++)
	{
	 c=c^Recv[i];
	}
	if((c&0x0f)!=(Recv[11]&0x0f))
	{
	  Chk_Code=0x2f;
          goto Lab1;
	}
	Chk_Code=0x1f;
	Zn=(Zn&0x0f)+1;
        for(i=0;i<4;i++)
        {
            Send[i+3]=Buf[j++];
        }
	if(Zn<3)goto Lab1;
        return(1);
}
/********************/
bit Write_Station_Information()//写站点初始化信息0xa1
{
	uchar Buf[16];
	uchar c;
	uint i,j;
        Station=R_S_Data[3];
        Rating[0]=R_S_Data[4];
        Rating[1]=R_S_Data[5];
        Up_Rating=R_S_Data[6];
        Down_Rating=R_S_Data[7];
        //Timeout_Set=0xc1;
        for(i=0;i<5;i++)
        {
                Short_Center_Code[i]=R_S_Data[i+8];
        }
        for(i=0;i<5;i++)
        {
                Contral_Center_Code[i]=R_S_Data[i+13];
        }
	Buf[0]=Station;
	Buf[1]=Rating[0];
	Buf[2]=Rating[1];
	Buf[3]=Up_Rating;
	Buf[4]=Down_Rating;
	Buf[5]=Timeout_Set;
	for(i=0;i<5;i++)
	{
		Buf[i+6]=Short_Center_Code[i];
	}
	for(i=0;i<5;i++)
	{
		Buf[i+11]=Contral_Center_Code[i];
	}
        Buf[16]=0xff;
	j=0;
	Zn=0x50;
	Chk_Code=0x0f;
	Send[0]=0x7a;
	Send[1]=0x55;
        Send[3]=0x1f;
        Send[4]=0xe0;
        Send[5]=16;
        Send[6]=0xff;
Lab1:
        Send[2]=Zn;
	for(i=0;i<7;i++)
	{
	 Send_Char(Send[i]);
	}
	c=Send[0];
	for(i=1;i<7;i++)
	{
	 c=c^Send[i];
	}
	c=0x0f&c;
	Chk_Code=Chk_Code&0xf0;
	Chk_Code=Chk_Code|c;
	Send_Char(Chk_Code);
	         //准备接收
	for(i=0;i<12;i++)
	{
	 c=Recv_Data();
         if(Recv_bit==0)return(0);
         Recv[i]=c;
	}
	c=Recv[11]&0xf0;
	if(c!=0x10)goto Lab1;
	Zn=Recv[2];
	c=Recv[0];
	for(i=1;i<11;i++)
	{
	 c=c^Recv[i];
	}
	if((c&0x0f)!=(Recv[11]&0x0f))
	{
	  Chk_Code=0x2f;
          goto Lab1;
	}
	Chk_Code=0x1f;
	Zn=(Zn&0x0f)+1;
        for(i=0;i<4;i++)
        {
            Send[i+3]=Buf[j++];
        }
	if(Zn<5)goto Lab1;
        c=0;
        return(1);
}
/*********************************/
bit Timeout_Setup()//写定时上传方式0xa3
{
	uchar c;
	uint i;
        Timeout_Set=R_S_Data[3];

	Zn=0x20;
	Send[0]=0x7a;
	Send[1]=0x55;
	Send[3]=0x1f;
        Send[4]=0xe5;
        Send[5]=1;
        Send[6]=0xff;
	Chk_Code=0x0f;
Lab1:
	Send[2]=Zn;
	for(i=0;i<7;i++)
	{
	 Send_Char(Send[i]);
	}
	c=Send[0];
	for(i=1;i<7;i++)
	{
	 c=c^Send[i];
	}
	c=0x0f&c;
	Chk_Code=Chk_Code&0xf0;
	Chk_Code=Chk_Code|c;
	Send_Char(Chk_Code);
		//准备接收
	for(i=0;i<12;i++)
	{
	 c=Recv_Data();
         if(Recv_bit==0)return(0);
         Recv[i]=c;
	}
	c=Recv[11]&0xf0;
	if(c!=0x10)goto Lab1;
	Zn=Recv[2];
	c=Recv[0];
	for(i=1;i<11;i++)
	{
	 c=c^Recv[i];
	}
	if((c&0x0f)!=(Recv[11]&0x0f))
	{
	  Chk_Code=0x2f;
          goto Lab1;
	}
	Chk_Code=0x1f;
	Zn=(Zn&0x0f)+1;
        Send[3]=Timeout_Set;
        Send[4]=0x01;
        Send[5]=0x01;
        Send[6]=0x01;
	if(Zn<2)goto Lab1;
        return(1);
}
/**************************/
bit DingShiShangChuan_OneDay(uchar High_Addr,uchar Low_Addr)
{
        uchar c;
	uint i,j,c1=0;
	j=3;
        R_S_Data[0]=0x8a;
        R_S_Data[1]=0xc1;
        R_S_Data[2]=110;
	Zn=0x01;
        Chk_Code=0x0f;
	Send[0]=0x7a;
	Send[1]=0x5a;
	Send[3]=High_Addr;
	Send[4]=Low_Addr;
	Send[5]=110;
	Send[6]=0xff;
Lab1:
	Send[2]=Zn;
	for(i=0;i<7;i++)
	{
	  Send_Char(Send[i]);
	}
	c=Send[0];
	for(i=1;i<7;i++)
	{
	 c=c^Send[i];
	}
	c=0x0f&c;
	Chk_Code=Chk_Code&0xf0;
	Chk_Code=Chk_Code|c;
	Send_Char(Chk_Code);
		//准备接收
	for(i=0;i<12;i++)
	{
	 c=Recv_Data();
         if(Recv_bit==0)return(0);
         Recv[i]=c;
	}
	c=Recv[11]&0xf0;
	if(c==0x20)goto Lab1;
	Zn=Recv[2];
	c=Recv[0];
	for(i=1;i<11;i++)
	{
	 c=c^Recv[i];
	}
	if((c&0x0f)!=(Recv[11]&0x0f))
	{
	  Chk_Code=0x2f;
          goto Lab1;
	}
	Chk_Code=0x1f;
	for(i=0;i<8;i++)
	{
	  R_S_Data[j++]=Recv[i+3];
	}
        c1++;
	if(c1<14)goto Lab1;
        return(1);
}
/**************************/
bit DingShiShangChuan_OneMonth(uchar High_Addr,uchar Low_Addr)//定时上传一月统计信息
{
        uchar idata c,c1=0;
        uint idata i,j;
	j=3;
        R_S_Data[0]=0x8a;
        R_S_Data[1]=0xc2;
        R_S_Data[2]=16;
        Chk_Code=0x0f;
	Zn=0x30;
	Send[0]=0x7a;
	Send[1]=0x5a;
	Send[3]=High_Addr;
	Send[4]=Low_Addr;
	Send[5]=16;
	Send[6]=0xff;
Lab1:
	Send[2]=Zn;
	for(i=0;i<7;i++)
	{
	  Send_Char(Send[i]);
	}
	c=Send[0];
	for(i=1;i<7;i++)
	{
	 c=c^Send[i];
	}
	c=0x0f&c;
	Chk_Code=Chk_Code&0xf0;
	Chk_Code=Chk_Code|c;
	Send_Char(Chk_Code);
		//准备接收
	for(i=0;i<12;i++)
	{
	 c=Recv_Data();
         if(Recv_bit==0)return(0);
         Recv[i]=c;
	}
	c=Recv[11]&0xf0;
	if(c!=0x10)goto Lab1;
	Zn=Recv[2];
	c=Recv[0];
	for(i=1;i<11;i++)
	{
	 c=c^Recv[i];
	}
	if((c&0x0f)!=(Recv[11]&0x0f))
	{
	  Chk_Code=0x2f;
          goto Lab1;
	}
	Chk_Code=0x1f;
	for(i=0;i<8;i++)
	{
	  R_S_Data[j++]=Recv[i+3];
	}
        c1++;
	if(c1<2)goto Lab1;
        return(1);
}
/**************************/
bit ShangChuanLaiTingDian_OneMonth()//定时上传一月来停电信息
{
        uchar c;
	uint i,j,c1=0;
	j=3;
        R_S_Data[0]=0x8a;
        R_S_Data[1]=0xc3;
        R_S_Data[2]=112;
	Zn=0x01;
        Chk_Code=0x0f;
	Send[0]=0x7a;
	Send[1]=0x5a;
	Send[3]=0x1f;
	Send[4]=0x00;
	Send[5]=112;
	Send[6]=0xff;
Lab1:
	Send[2]=Zn;
	for(i=0;i<7;i++)
	{
	  Send_Char(Send[i]);
	}
	c=Send[0];
	for(i=1;i<7;i++)
	{
	 c=c^Send[i];
	}
	c=0x0f&c;
	Chk_Code=Chk_Code&0xf0;
	Chk_Code=Chk_Code|c;
	Send_Char(Chk_Code);
		//准备接收
	for(i=0;i<12;i++)
	{
	 c=Recv_Data();
         if(Recv_bit==0)return(0);
         Recv[i]=c;
	}
	c=Recv[11]&0xf0;
	if(c==0x20)goto Lab1;
	Zn=Recv[2];
	c=Recv[0];
	for(i=1;i<11;i++)
	{
	 c=c^Recv[i];
	}
	if((c&0x0f)!=(Recv[11]&0x0f))
	{
	  Chk_Code=0x2f;
          goto Lab1;
	}
	Chk_Code=0x1f;
	for(i=0;i<8;i++)
	{
	  R_S_Data[j++]=Recv[i+3];
	}
        c1++;
	if(c1<14)goto Lab1;
        return(1);
}
/**************************/
bit ShangChuanStationinformation()                 //读取站点信息
{
        uchar idata c,c1=0;
        uint idata i,j;
	j=0;
        Chk_Code=0x0f;
	Zn=0x30;
	Send[0]=0x7a;
	Send[1]=0x5a;
	Send[3]=0x1f;
	Send[4]=0xe0;
	Send[5]=21;
	Send[6]=0xff;
Lab1:
	Send[2]=Zn;
	for(i=0;i<7;i++)
	{
	  Send_Char(Send[i]);
	}
	c=Send[0];
	for(i=1;i<7;i++)
	{
	 c=c^Send[i];
	}
	c=0x0f&c;
	Chk_Code=Chk_Code&0xf0;
	Chk_Code=Chk_Code|c;
	Send_Char(Chk_Code);
		//准备接收
	for(i=0;i<12;i++)
	{
         c=Recv_Data();
         if(Recv_bit==0)return(0);
	 Recv[i]=c;
	}
	c=Recv[11]&0xf0;
	if(c!=0x10)goto Lab1;
	Zn=Recv[2];
	c=Recv[0];
	for(i=1;i<11;i++)
	{
	 c=c^Recv[i];
	}
	if((c&0x0f)!=(Recv[11]&0x0f))
	{
	  Chk_Code=0x2f;
          goto Lab1;
	}
	Chk_Code=0x1f;
	for(i=0;i<8;i++)
	{
	  R_S_Data[j++]=Recv[i+3];
	}
        c1++;
	if(c1<3)goto Lab1;
        Station=R_S_Data[0];                              //站号
        Sta_No=R_S_Data[0];                               //站号
        Rating[0]=R_S_Data[1];                            //电压等级
        Rating[1]=R_S_Data[2];                            //电压等级
        Up_Rating=R_S_Data[3];                            //上限
        Down_Rating=R_S_Data[4];                          //下限
        Timeout_Set=R_S_Data[5];
        for(i=0;i<5;i++)
        {
         Short_Center_Code[i]=R_S_Data[i+6];              //短信中心号码
        }
        for(i=0;i<5;i++)
        {
         Contral_Center_Code[i]=R_S_Data[i+11];           //控制中心号码
        }
        for(i=0;i<5;i++)
        {
         Power_Lost_Code[i]=R_S_Data[i+16];               //停电报警号码
        }
        return(1);
}

bit Recv_CPU_Data()//来自cpu的定时报警
{
        uchar c;
        uint i;
        c=Recv_Data();
        if(Recv_bit==0)return(0);
        if(c!=0x7a)return(0);
        c=Recv_Data();
        if(Recv_bit==0)return(0);
        c=Recv_Data();
        if(Recv_bit==0)return(0);
        Recv[0]=c;
        c=Recv_Data();
        if(Recv_bit==0)return(0);
        Recv[1]=c;
        for(i=0;i<7;i++)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -