GPRSGSM程序.docx
- 文档编号:27575536
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:73
- 大小:34.40KB
GPRSGSM程序.docx
《GPRSGSM程序.docx》由会员分享,可在线阅读,更多相关《GPRSGSM程序.docx(73页珍藏版)》请在冰豆网上搜索。
GPRSGSM程序
//=====GPRSMODULEPROGRAM=============
//==FROM2003.9.=======================
//=======bycfj========================
#include
//#include
#include
#include
#include
#include
#include
#defineUintunsignedint
#define_3NOP()_NOP();_NOP();_NOP();
#define_4NOP()_NOP();_NOP();_NOP();_NOP();
#define_5NOP()_NOP();_NOP();_NOP();_NOP();_NOP();
#defineEstart_Addr0//0EEprom起始地址
#defineWork_Mode_AddrEstart_Addr+6//6工作模式设置:
1字节
#defineMAPN_AddrWork_Mode_Addr+1//7移动网关接入点名称:
20字节ASCI#defineDSC_Ip_AddrMAPN_Addr+20//27数据服务中心IP地址:
12字节ASC#defineDSC_Port_AddrDSC_Ip_Addr+12//39数据中心端口:
5字节ASCII#defineNet_Protocol_AddrDSC_Port_Addr+5//44网络数据传输协议
#defineTerminal_SIM_AddrNet_Protocol_Addr+1//45终端SIM
#defineBeat_AddrTerminal_SIM_Addr+11//56心跳周期地址
#definePassWord_AddrBeat_Addr+1//57设置密码
#defineSCA_SIM_AddrPassWord_Addr+6//63短信服务中心号码
#defineDSC_SIM_AddrSCA_SIM_Addr+11//74数据中心号码
#defineBackUp_AddrDSC_SIM_Addr+11//85备用
#defineSet_CrcBackUp_Addr+4//89CRC校验码
#defineEstart2_AddrEstart_Addr+100
//******************************************************************
//函数:
main()
//功能:
主函数
//输入参数:
//输出参数:
//==============================================================================//常量定义
//==============================================================================char*AT="AT\r";//AT命令用于检测GPRS是否存在或开机。
charAT_Echo[12]={'A','T','E','=','0','V','=','1','&','D','1',0X0D};//命令码不返回。
//char*AT_Echo="ATE=0V=1&D1\r";//命令码不返回。
char*AT_O="ATO\r";//从命令状态返回到数据状态。
char*AT_3Plus="+++AT\r";
char*AT_W="AT&W\r";//保存设置。
char*AT_ActivateIp="AT*E2IPA=1,1\r";
charOpenIp[11]={'A','T','*','E','2','I','P','O','=','1',',',};
char*AT_CloseIp="AT*E2IPC\r";//关闭GPRS通道
char*AT_CMGF="AT+CMGF=0\r";//短信PDUMODE
charTerminal_Command[19]={0x68,0x0d,0x0d,0x68,0x4a,0x99,0x99,0x07,0x00,0x0b,0x80,0x30charEcho_Array[]={0X2F,0X00,0X07,0XFF,0XFF,0XFD,0XA3,0X03};//设置正确信号
charAlarm_Switch_Echo[]={0X2F,0X00,0X08,0XFF,0XFF,0XCE,0XEC,0X8F,0X14};
charData_Switch_Echo[]={0X2F,0X00,0X08,0XFF,0XFF,0XCD,0XEC,0XDA,0X47};
//==============================================================================//函数定义
//==============================================================================voidPort_Initial(void);
voidDelay(Uint);
voidFirst_Wr_EEprom(void);
voidVariable_Initial(void);
voidTurn_On_Gprs(void);
voidTurn_Off_Gprs(void);//打开GPRS电源
voidUSART0_Initial(void);
voidUSART1_Initial(void);
voidTimer_Initial(void);
voidData_Cmnd_Snd(UintL,char*Temp_Pointer,charSport,Uint);voidGprs_At_Command(Uint,char*Pcommand,UintWTime);
voidRx1Data_Judge_Trasmit(void);
voidRx0Data_Judge_Trasmit(void);
//externvoidEWEN_93lc66(void);
externvoidStart_93lc66(charOp_Code);
externcharRd_Data(charStart_Addr,charData_Len,Uint*Pointer);externvoidWr_Data(charStart_Addr,charData_Len,Uint*Pointer);voidCal_Crc(char*Pointer,UintL);//计算返回CRC值。
charRead_Parameters_Initial(char);//从EEPROM中读取工作参数、初始化。
voidWorkMode_Initial_Log(void);
externvoidConstruct_PDU_SMS(charUDL,char*User_Data);//构造SMS内容。
externvoidEcho_SMS_Master(char);
voidAsci_To_Hex(char*Pointer,Uint);
externvoidEcho_Sms_Mobile(void);
voidEcho_Rx0(char*Pointer,charLenth);
externvoidMobile_SMS_Get(char);
externvoidMobile_SMS_Set(char);
externvoidEncode7Bit(char);
externvoidDecode8Bit(char);
externcharReturnHex(char);
voidHeart_Beat(void);
voidRead_Delete_SMS(void);
voidFeed_WatchDog(void);
voidGprs_Mode_SMS(Uint);
voidJudge_SMS_Counter(void);
voidData_Status(void);
voidConnect_Master_Station(void);
externvoidWaiting_Result(UintWresult_Time);
externvoidZheJiang_Protocol_Down(Uint);
externvoidZheJiang_Protocol_Up(Uint);
voidInqury_Signal(void);
//============================
//全局变量定义
//============================
charVIO;
UintTx1_Snd_Lenth,Tx1_Pointer,Rx1_Pointer;//发送长度、发送指针、接收指针UintTx0_Snd_Lenth,Tx0_Pointer,Rx0_Pointer;//发送长度、发送指针、接收char*Pointer0,*Pointer1;
charCommand_Data_Status;
charRx1_Start_Flag;//串口接收开始标志
UintRx1_Time_Counter;//串口接收时间长度
charRx1_TimeOut_Flag;//接收超时标志
charRx0_Start_Flag;//串口接收开始标志
charRx0_Time_Counter;//串口接收时间长度
charRx0_TimeOut_Flag;//接收超时标志
UintWait_Result_Time;
charWait_Result_TimeOut;
charFlash_Timer_Len;//CPU正常运行指示灯。
charLed1_Flash;
UintHeart_Beat_Interval;//自动检测IP连接的间隔时间
charHeart_Beat_Flag;//自动检测标志
charnMinute_Beat_Flag;
charHeart_Beat_Time;
charAT_OpenIp0[35];
charRx1_Data_Buffer[360];//GPRS串口数据缓冲区charRx0_Data_Buffer[256];//终端数据缓冲区charTerminal_SIM[12];//终端手机号码。
charCenter_SIM[12];//短信通信手机号码。
charData_Center_Sim[12];//数据中心手机号码。
charSCA_SIM[4];//短信服务中心号码UintTemp_iArray[100];//临时缓冲区:
整数charTemp_cArray[200];//临时缓冲区:
字符charSMS_TPDU[300];
charUser_Data[140];
charPassWord[6];
charAT_CGDCONT[40];
charAT_Set_Ok;
UintPDU_Len;
charRetry_Counter;
charAT_Test_Flag;
charIpConnect_Flag;
charRx1_Led,Tx1_Led;//串口1收发指示灯UintCRC;//CRC校验值。
charSignal_Val;//信号强度
UintBeat_Rcv_Fail;//心跳未接收到次数(若连续发送三次未收到,则重新连接)UintRead_SMS_Time;
charWork_Mode;//模块工作模式
char,Tx1_Pointer,Rx1_Pointer;//发送长度、发送指针、接收指针charMsg_Snd_Flag;
charTx_Head;//发送引导头
charSMS_Mode;
charTerminal_Addr_High;
charTerminal_Addr_Low;
charRead_SMS_Flag;
charSIM_SMS_Flag;
charReceived_Read_Msg_Flag;
charDSR;
UintSMS_Index;//连接失败次数。
charRead_Flag;
charRing_Counter;
charBeat_Rcved_Flag;//心跳接收到标志。
charBeat_Test_Start;//心跳测试标志。
charBeat_Test_Fail;
UintBeat_Test_Interval;
charFirst_Connect_Flag;//上电第一次连接标志。
UintMinute2_Interval;
charMinute2_Interval_Flag;
charInqury_Signal_Flag;
charTerminal_Request_Flag;
charii;//清缓冲区指针。
UintSecond;
UintSignalmscnt;
charMinute;
charConnect_Counter;
UintRx1_Time_Interval;
charexternMsg_Snd_Success;
UintTel_Ring_Counter;
charRing_Start_Flag;
UintRing_Time;
charZj_Protocol_Flag;
charSMS_Counter;
charLoad_Master_Flag;
charHeart_Flag;
charNo_Carrier_Flag;
//===========================
//主程序
//============================
voidmain(void)
{
chari;
_3NOP();
//WDTCTL=WDTPW+WDTHOLD;
BCSCTL1|=XT2OFF+XTS;//启动LFTX14M高速晶振,关闭XT2晶振BCSCTL2|=SELM1+SELM0;//LFTTX1CLK:
4M-->MCLK
do
{
IFG1&=~OFIFG;
for(i=0xFF;i>0;i--);
}while((IFG1&OFIFG)!
=0);//等待时钟源转换完。
P2DIR|=0X08;//P2.0:
LED5;P2.1:
LED6;p2.2--ringP2OUT&=0XF7;
P1DIR|=0X10;
P1OUT&=0XEF;
WDTCTL=WDTPW+WDTSSEL;//看门狗开启。
Delay(20000);
Port_Initial();//初始化P1、P2、P3口等while(VIO==0X00)//若GPRS尚未开机,则打开GPRS电源{
Turn_On_Gprs();
VIO=P5IN&0X10;//VIO=P5.4
_3NOP();
}
Variable_Initial();//变量初始化。
Delay(10);
//EWEN_93lc66();//EEPROM擦、写使能Rd_Data(254,1,Temp_iArray);//检测是否为第一次运行程序if(Temp_iArray[0]!
=0X555C)
First_Wr_EEprom();//写入出厂默认数据Read_Parameters_Initial(Estart_Addr);if(Read_Flag==0)//从EEPROM中读取工作参数、初始化CPU。
Read_Parameters_Initial(Estart2_Addr);//初始化时,若原始数据不对,则从备分区读取。
_3NOP();
Read_Delete_SMS();//上电时,读取删除短信息。
for(;;)//***主循环*****
{
_3NOP();
VIO=P5IN&0X10;//VIO=P5.4
WDTCTL=WDTPW+WDTCNTCL;
DSR=P3IN&0X08;//P3.3:
显示系统命令状态/数据状态。
if(DSR!
=0)//
{
P1OUT|=0X40;//P1.6:
命令状态。
//Load_Master_Flag=0;
}
else
P1OUT&=~0X40;//数据状态。
if(Rx1_TimeOut_Flag==1)//RX1若接收超时,进行判断。
{
Rx1_TimeOut_Flag=0;
Rx1_Start_Flag=0;
Rx1_Time_Counter=0;
Rx1Data_Judge_Trasmit();//串口1数据判断转发给终端。
}
if(Rx0_TimeOut_Flag==1)//RX0若接收超时,进行判断。
{
Rx0_TimeOut_Flag=0;
Rx0_Start_Flag=0;
Rx0_Time_Counter=0;
Rx0Data_Judge_Trasmit();//串口0数据转发给主站。
}
if(Command_Data_Status==1)//GPRS连接上,则发2个心跳,有关变量复位。
{
Data_Status();
}
if((DSR!
=0X00)&&(Inqury_Signal_Flag==1))//
{
Inqury_Signal_Flag=0;
Inqury_Signal();
}
if((DSR!
=0X00)&&(((Minute+1)%30)==0))//每隔周期检测是否有新的短信接收到。
{
Minute++;
SIM_SMS_Flag=0;
Read_SMS_Flag=0;
Read_Delete_SMS();
}
if((DSR==0)&&(Heart_Flag==1)&&(Work_Mode==1))//forzhejiangtest
{
Heart_Beat();
Heart_Flag=0;
Beat_Test_Start=1;
Beat_Test_Interval=2000;//20秒钟自动检测心跳
Beat_Test_Fail=0;
Beat_Rcved_Flag=0;
}
if((Work_Mode==1)&&(nMinute_Beat_Flag==1)&&(Heart_Beat_Time!
=0))//每隔?
分钟心跳周期发{
nMinute_Beat_Flag=0;
Heart_Beat();
Beat_Test_Start=1;
Beat_Test_Interval=2000;//20秒钟自动检测心跳
Beat_Test_Fail=0;
Beat_Rcved_Flag=0;
}
if((Tel_Ring_Counter>=1)||(First_Connect_Flag==1)||(Terminal_Request_Flag==1)||(Beat_Te{
if((Work_Mode==1)&&(Heart_Beat_Flag==1))
{
Heart_Beat_Flag=0;
Heart_Beat_Interval=6000;
Connect_Master_Station();
if(Connect_Counter++>=30)
Turn_Off_Gprs();//复位GPRS
}
}
if(VIO==0)//判断是否有异常关机。
{
_5NOP();_5NOP();
VIO=P5IN&0X10;//确认VIO=P5.4
_5NOP();_5NOP();
if(VIO==0)
Turn_On_Gprs();
}
}
}
//=============================================//函数:
Variable_Initial(void)
//功能:
有关变量初始化
//输入:
//输出:
//==============================================voidVariable_Initial(void)
{
Signalmscnt=0;
Ring_Counter=0;
Received_Read_Msg_Flag=0;
nMinute_Beat_Flag=0;
Connect_Counter=0;
Command_Data_Status=0;
Beat_Rcv_Fail=2;
First_Connect_Flag=1;//第一次连接标志
Inqury_Signal_Flag=0;
Terminal_Request_Flag=0;
Beat_Test_Fail=0;
Beat_Test_Start=0;
Beat_Test_Interval=2000;//心跳等待时间间隔。
Heart_Beat_Interval=6000;
Second=0;
Minute=0;
Rx1_Time_Interval=4;
Msg_Snd_Flag=0;
Msg_Snd_Success=0;
Tel_Ring_Counter=0;
Ring_Start_Flag=0;
Ring_Time=0;
Zj_Protocol_Flag=1;//浙江规约
SMS_Counter=0;
Load_Master_Flag=0;
Heart_Flag=0;
No_Carrier_Flag=0;
Signal_Val=13;
}
//==============================================//函数:
Data_Status(void)
//功能:
数据状态时有关变量状态。
//输入:
//输出:
//==============================================voidData_Status(void)
{
chari;
charCheckSum=0;
charTemp_Load[]={0X68,0X91,0X01,0X07,0X1A,0X1E,0X00,0X68,
0XA1,0X03,0X00,0X11,0X11,0X11,0X00,0X16};
Command_Data_Status=0;
Heart_Beat_Interval=6000;
Ring_Counter=0;
First_Connect_Flag=0;
Beat_Test_Fail=0;
Beat_Test_Start=0;
Minute2_Interval=12000;
Minute2_Interval_Flag=0;
Terminal_Request_Flag=0;
nMinute_Beat_Flag=0;
Connect_Counter=0;
Tel_Ring_Counter=0;
Second=0;
Minute=0;
Heart_Flag=0;
No_Carrier_Flag=0;
if((Work_Mode==
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GPRSGSM 程序