GPRS-GSM程序.docx

上传人:scccc 文档编号:12560651 上传时间:2021-12-04 格式:DOCX 页数:51 大小:48.86KB
返回 下载 相关 举报
GPRS-GSM程序.docx_第1页
第1页 / 共51页
GPRS-GSM程序.docx_第2页
第2页 / 共51页
GPRS-GSM程序.docx_第3页
第3页 / 共51页
亲,该文档总共51页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《GPRS-GSM程序.docx》由会员分享,可在线阅读,更多相关《GPRS-GSM程序.docx(51页珍藏版)》请在三一文库上搜索。

1、/=GPRS MODULE PROGRAM=/=FROM 2003.9.=/=by cfj=#include<msp430x12x2.h>/#include<intrinsics.h>#include<stdio.h>#include<string.h>#include<stdlib.h>#include<ctype.h>#include<math.h>#define Uint unsigned int#define _3NOP() _NOP();_NOP();_NOP();#define _4NOP() _N

2、OP();_NOP();_NOP();_NOP();#define _5NOP() _NOP();_NOP();_NOP();_NOP();_NOP();#define Estart_Addr 0 /0 EEprom 起始地址#define Work_Mode_Addr Estart_Addr+6 /6工作模式设置: 1 字节#define MAPN_AddrWork_Mode_Addr+1 /7 移 动 网 关 接 入 点 名 称:20 字节 ASCI#define DSC_Ip_Addr MAPN_Addr+20 /27 数据效劳中 心 IP 地址: 12 字节 ASC#define DS

3、C_Port_Addr DSC_Ip_Addr+12 /39 数 据 中 心 端 口 : 5 字 节 ASCII#define Net_Protocol_Addr DSC_Port_Addr+5 /44 网络数据传输协议#define Terminal_SIM_Addr Net_Protocol_Addr+1 /45 终端 SIM#define Beat_Addr Terminal_SIM_Addr+11 /56 心跳周期地址#define PassWord_Addr Beat_Addr+1 /57 设置密码#define SCA_SIM_Addr PassWord_Addr+6 /63 短信

4、效劳中心号码#define DSC_SIM_Addr SCA_SIM_Addr+11 /74 数据中心号码#define BackUp_Addr DSC_SIM_Addr+11 /85 备用#define Set_Crc BackUp_Addr+4 /89 CRC 校验码#define Estart2_Addr Estart_Addr+100/*/ 函数: main()/ 功能:主函数/ 输入参数:/ 输出参数:/= =/常/ 量定义/= =char *AT二"ATr"/AT 命令用于检测 GPRS是 否存在或开机。charAT_Echo12='A',

5、9;T','E','=','0','V','=','1','&','D','1',0X0D;/ 命令码不返回。 /char *AT_Echo="ATE=0V=1&D1r"/ 命令码不返 回。char *AT_O="ATOr"/ 从命令状态返回到数据状态。char *AT_3Plus="+ATr"char *AT_W="AT&Wr" / 保存设

6、置。char *AT_ActivateIp="AT*E2IPA=1,1r"charOpenIp11='A','T','*','E','2','I','P','O','=','1',',',;char *AT_Closelp二"AT*E2IPCr"关闭 GPRS通道char *AT_CMGF二"AT+CMGF=Or" 短信 PDU MODEcharTerminal

7、_Command19=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;/ =/函/ 数定义/= =void Port_Initia

8、l(void);void Delay(Uint);void First_Wr_EEprom(void);void Variable_Initial(void);void Turn_On_Gprs(void);void Turn_Off_Gprs(void);翻开 GPRSt源void USART0_Initial(void);void USART1_Initial(void);void Timer_Initial(void);void Data_Cmnd_Snd(Uint L,char *Temp_Pointer,char Sport,Uint);voidGprs_At_Command(Uin

9、t,char *Pcommand,UintWTime);void Rx1Data_Judge_Trasmit(void);void Rx0Data_Judge_Trasmit(void);/extern void EWEN_93lc66(void);extern void Start_93lc66(char Op_Code);extern char Rd_Data(char Start_Addr,char Data_Len,Uint *Pointer);externvoid Wr_Data(char Start_Addr,charData_Len,Uint *Pointer);void Cal

10、_Crc(char *Pointer,Uint L);/计算返回crC直。char Read_Parameters_lnitial(char);/从 EEPRO中读取工作参数、初始化。 void WorkMode_Initial_Log(void);extern void construct_PDU_SMS(char UDL,char *User_Data);/构造 SMS内容。extern void Echo_SMS_Master(char);void Asci_To_Hex(char *Pointer,Uint);extern void Echo_Sms_Mobile(void);void

11、 Echo_Rx0(char *Pointer,char Lenth);extern void Mobile_SMS_Get(char);extern void Mobile_SMS_Set(char);extern void Encode7Bit(char);extern void Decode8Bit(char);extern char ReturnHex(char);void Heart_Beat(void);void Read_Delete_SMS(void);void Feed_WatchDog(void);void Gprs_Mode_SMS(Uint);void Judge_SM

12、S_counter(void);void Data_Status(void);void connect_Master_Station(void);extern void Waiting_Result(Uint Wresult_Time);extern void ZheJiang_Protocol_Down(Uint);extern void ZheJiang_Protocol_Up(Uint); void Inqury_Signal(void);/=/ 全局变量定义/=char VIO;Uint Tx1_Snd_Lenth,Tx1_Pointer,Rx1_Pointer; / 发送长度、发 送

13、指针、接收指针 Uint Tx0_Snd_Lenth,Tx0_Pointer,Rx0_Pointer; / 发送长度、发送指针、接收 char *Pointer0,*Pointer1;char Command_Data_Status;char Rx1_Start_Flag; /串口接收开始标志Uint Rx1_Time_Counter;/串口接收时间长度char Rx1_TimeOut_Flag;/接收超时标志char Rx0_Start_Flag; /串口接收开始标志char Rx0_Time_Counter;/串口接收时间长度char Rx0_TimeOut_Flag;/接收超时标志Uin

14、t Wait_Result_Time;char Wait_Result_TimeOut;char Flash_Timer_Len; /CPU 正常运行指示灯。char Led1_Flash;Uint Heart_Beat_Interval;/自动检测 IP 连接的间隔时间char Heart_Beat_Flag; / 自动检测标志char nMinute_Beat_Flag;char Heart_Beat_Time;char AT_OpenIp035;char Rx1_Data_Buffer360;/GPRS 串 口 数 据 缓 冲 区 char Rx0_Data_Buffer256;/ 终端

15、数据缓冲区 char Terminal_SIM12;/ 终端 号码。 char Center_SIM12; / 短信通信 号码。 char Data_Center_Sim12;/ 数据中心 号码。 char SCA_SIM4; / 短 信效劳中心号码 Uint Temp_iArray100;/ 临时缓冲区:整数 char Temp_cArray200;/ 临时缓冲区:字符 char SMS_TPDU300;char User_Data140;char PassWord6;char AT_CGDCONT40;char AT_Set_Ok;Uint PDU_Len;char Retry_Count

16、er;char AT_Test_Flag;char IpConnect_Flag;char Rx1_Led,Tx1_Led;/ 串口 1 收发指示灯 Uint CRC;/CRC 校验 值。char Signal_Val;/ 信号强度Uint Beat_Rcv_Fail;/ 心跳未接收到次数假设连续发送三次未收 到,那么重新连接 Uint Read_SMS_Time;char Work_Mode;/ 模块工作模式char ,Tx1_Pointer,Rx1_Pointer; / 发送长度、发送指针、接收指 针 char Msg_Snd_Flag;char Tx_Head; / 发送引导头char

17、SMS_Mode;char Terminal_Addr_High;char Terminal_Addr_Low;char Read_SMS_Flag;char SIM_SMS_Flag;char Received_Read_Msg_Flag;char DSR;Uint SMS_Index;/ 连接失败次数。char Read_Flag;char Ring_Counter;char Beat_Rcved_Flag;/ 心 跳 接 收 到 标 志 。 charBeat_Test_Start;/ 心跳测试标志。 char Beat_Test_Fail;Uint Beat_Test_Interval;

18、char First_Connect_Flag;/ 上 电 第 一 次 连 接 标 志 。 Uint Minute2_Interval;char Minute2_Interval_Flag;char Inqury_Signal_Flag;char Terminal_Request_Flag;char ii;/ 清缓冲区指针。Uint Second;Uint Signalmscnt;char Minute;char Connect_Counter;Uint Rx1_Time_Interval;char extern Msg_Snd_Success;Uint Tel_Ring_Counter;ch

19、ar Ring_Start_Flag;Uint Ring_Time;char Zj_Protocol_Flag;char SMS_Counter;char Load_Master_Flag;char Heart_Flag;char No_Carrier_Flag;/=/ 主程序/=void main(void)char i;_3NOP();/WDTCTL=WDTPW+WDTHOLD;BCSCTL1|=XT20FF+XTS; /启动 LFTX1 4M高速晶振,关闭 XT2 晶振 BCSCTL2|=SELM1+SELM0; /LFTTX1CLK:4M->MCLKdoIFG1&=0FI

20、FG;for(i=0xFF;i>0;i-);while(IFG1&0FIFG)!=0);/ 等 待 时 钟 源 转 换 完 。P2DIR|=0X08;/P2.0:LED5;P2.1:LED6;p2.2-ring P20UT&=0XF7;P1DIR|=0X10;P10UT&=0XEF;WDTCTL二WDTPW+WDTSS看门狗开启。Delay(20000);Port_Initial();/ 初始化 P1、P2、P3 口等 while(VI0=0X00) /假设GPR晡未开机,那么翻开GPRSfe源Turn_0n_Gprs();VI0=P5IN&0X10; /

21、VI0=P5.4_3N0P();Variable_Initial();/ 变量初始化。 Delay(10);/EWEN_93lc66();/EEPROM 擦 、 写 使 能 Rd_Data(254,1,Temp_iArray);/ 检 测 是 否 为 第 一 次 运 行 程 序 if(Temp_iArray0!=0X555C)First_Wr_EEprom();/ 写 入 出 厂 默 认 数 据 Read_Parameters_Initial(Estart_Addr);if(Read_Flag=0)/ 从 EEPROM 中 读 取 工 作 参 数 、 初 始 化 CPU 。 Read_Para

22、meters_Initial(Estart2_Addr);/ 初始化时 , 假设原始数据不 对,那么从备分区读取。 _3NOP();Read_Delete_SMS();/ 上电时,读取删除短信息。 for(;)/* 主 循环 *_3NOP();VIO=P5IN&0X10; /VIO=P5.4WDTCTL=WDTPW+WDTCNTCL;DSR=P3IN&0X08/;/P3.3: 显示系统命令状态 / 数据状态。 if(DSR!=0) /P1OUT|=0X40;/P1.6: 命令状态。 /Load_Master_Flag=0;elseP10UT&二0X40;/数据状态。if

23、(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

24、连接上,那么发 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)/forzh

25、ejiang testHeart_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_Tim e!=0) / 每隔?分钟心跳周期发 nMinute_Beat_Flag=0;Heart_Beat();Beat_Test_Start=1;Beat_Test_Interval=2000;/20 秒钟自动

26、检测心跳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();/ 复位 GPRSif(VIO=0)/ 判

27、断是否有异常关机。_5NOP();_5NOP();VIO=P5IN&0X10; / 确认 VIO=P5.4_5NOP();_5NOP();if(VIO=0)Turn_On_Gprs();/=/函 数 : Variable_Initial(void)/ 功能:有关变量初始化/ 输入:/ 输出:/=void Variable_Initial(void)Signalmscnt=0;Ring_Counter=0;Received_Read_Msg_Flag=0;nMinute_Beat_Flag=0;Connect_Counter=0;Command_Data_Status=0;Beat_Rc

28、v_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

29、_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)char i;char CheckSum=0;char Temp_Load=0X68,0X91,0X01,0X07,0X1A,0X1E,0X00,0X68,0XA1,0X03,0X00,0X11,0X11,0X11,0X00,

30、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;secondHqMinuCDHqHealilF-aguqNolcalTieIF-agHq=h(wo

31、klModeHH0x2)QOQO(zjlpooc2IF_agHH0)NoppHealilBeasDe-ay(5sHealilBeas=h(woklModeHHOX2)QOQO(zjlpooc2IF_agHH_k) (LoadlMasCDIF-agHHO)/nsmffi*宀 LoadIM asCDIF - ag H 9De-ay(5sfo(ll'0xH15T+)TemplcAITay=HTemplLoad=r_*fo(ll'0xH3T+)= 帶晁连年QOQOTemp_cArrayi+1=(Terminal_SIMi*2+1-0x30)<<4)+(Terminal _S

32、IMi*2-0x3 */ / hunter term addressfor(i=0;i<=13;i+)/ 校验和CheckSum+=Temp_cArrayi;Temp_cArray14=CheckSum;Delay(100);Tx_Head=Temp_cArray0;Data_Cmnd_Snd(15,&Temp_cArray1,1,5);/*Delay(200);Tx_Head=Temp_cArray0;Data_Cmnd_Snd(15,&Temp_cArray1,1,5);*/Beat_Test_Start=1;Beat_Test_Interval=12000;/20

33、秒钟自动检测心跳Beat_Test_Fail=0;Beat_Rcved_Flag=0;_NOP();/ 函数: Inqury_Signal ()/功能:查询当前GSM言号强度/ 输入:/ 输出:/=void Inqury_Signal(void)char *AT_CSQ="AT+CSQr"/ 检测信号强度。char i,CheckSum=0;char Inqury_Counter=3;char Temp;Inqury_Again:;Temp=Signal_Val;Inqury_Signal_Flag=0;AT_Set_Ok=0;Rx1_Pointer=0;Rx1_TimeO

34、ut_Flag=0;Tx_Head=AT_CSQ0;Data_Cmnd_Snd(6,&AT_CSQ1,1,40); / 查寻信号强弱命令Delay(200);for(i=0;i<Rx1_Pointer;i+)/ 检测信号强弱等级。if(RX1IDaarIBUff2iHH+)QOQO(RX1IDaarIBUff2i+1llHC)QOQO(RXIDaorIBUff2i+2llHS 宀5刀生|335-|81|=|?2+'4|"匚)000030><1|335-|8吕2+'5|“32) =?观灌宀=b(RXIDaarIBUrr2i+7-il-:)1a血

35、逼岡昌(if(RX1IDaorIBUff2i+648HH9)QOQO(RX1IDaarIBUff2i+748HH9)二萍皿零苣(ATISeflokuliP1OUTII0X90WLEDP LED5 LED6陟狛IT99)P2OUTII0X01-Signa厂valrowa<4n逼WR 0。gofo signaooqif(RXIDaarIBUff2i+648)VH2)QOQO(R>dlDaarIBUff2i+748ah9)=a血逼w(ATISeflokuliPOUTWOX7FWLED茁逼。(V20)P2OUTII0X01-p1OUTll0x_kqSigna厂valrRXIDaorIBUf

36、f2i+648w 4a- Bca曲 signa_lvallsigna_lva-A<4y/ 忻巔 8存。Signal_Val+二Rx1_Data_Bufferi+7-48;个位 BCD码if(Signal_Val>0x31)Signal_Val=0x31;goto Signal000;if(Rx1_Data_Bufferi+;/ 接收超时标志 6-48)=AT_Set_Ok=1;P20UT&二OXFE;/LED亮、中。(>10<20) P1OUT|=0X90;BCDBCDSignal_Val=Rx1_Data_Bufferi+6-48;/Signal_Val=Si

37、gnal_Val<<4;/Signal_Val+=Rx1_Data_Bufferi+7-48;/ if(Signal_Val>0x19)Signal_Val=0x19;goto Signal000;if(Rx1_Data_Bufferi+7=',')/信号强度小于10 AT_Set_Ok=1;P1OUT&二 OXEF;/LED亮、低。(<10) P2OUT|=0X01;P1OUT|=0X80;Signal_Val=Rx1_Data_Bufferi+6-48;/BCDif(Signal_Val>9)Signal_Val=0x09;goto S

38、ignal000;Signal000:if(AT_Set_Ok=0)Signal_Val=0x00;AT_Set_Ok=0;if(Signal_Val=0x00)if(Inqury_Counter-)!=0)for(i=0;i<20;i+)Rx1_Data_Bufferi=0;goto Inqury_Again;控制字 获取终端地址低位 获取终端地址高位 类型 可变结构限定词 传送原因数据单元标识 L 数据单元标识 H 记录地址if(Signal_Val=0x00)if(Temp%2=0)Temp+=1;elseTemp-=1;Signal_Val=Temp;/*User_Data0=U

39、ser_Data3=0x68;/ 数据头User_Data1=User_Data2=11;/ 数据长度User_Data4=0x5A; /User_Data5=0x99; /User_Data6=0x99; /User_Data7=0x06; /User_Data8=0x82; /User_Data9=0x05; /User_Data10=0x55; /User_Data11=0x30; /User_Data12=0x00; / 信 号 强 度User_Data13=(Signal_Val&0X0F)+0X30;User_Data14=(Signal_Val>>4)&

40、;0X0F)+0X30; for(i=0;i<=10;i+)/ 计算 102 规约校验和 CheckSum+=User_Data4+i;User_Data15=CheckSum;User_Data16=0x16;*/User_Data0 = 0x68;User_Data1 = 0x99;User_Data2 = 0x99;User_Data3 = 0x99;User_Data4 = 0x99;User_Data5 = 0x5E;User_Data6 = 0x00;User_Data7 = 0x68;User_Data8 = 0x0F;User_Data9 = 0x09; / 自 定 义

41、数 据 帧 数 据 区 长 度 User_Data10= 0x00;User_Data11 = 0x1A;User_Data12 = 0x82;User_Data13 = 0x20;User_Data14 = 0x99;User_Data15 = 0x12;User_Data16 = 0x34;User_Data17 = 0x56;User_Data18 = 0x78;User_Data19=(Signal_Val&0X0F)+0X30; / 信 号 强 度 User_Data20=(Signal_Val>>4)&0X0F)+0X30;for(i=0;i<=2

42、0;i+)/ 计算校验和CheckSum+=User_Datai;User_Data21=CheckSum;User_Data22=0x16;Data_Cmnd_Snd(22,User_Data,0,5);/ 向串口 0 发送信号强度数据发送长度 22 P5OUT|=0x80;/ 接收指示灯灭。Rx1_TimeOut_Flag=0;/=/函/ 数 :Rd_Parameter_Initial()II功能:从EEPRO中读取工作参数、IP地址、端口、SMS号码等II 初始化波特率、定时器等/ 输入参数:/ 输出参数:/=char Read_Parameters_Initial(char Addre

43、ss)char i,j;Uint Temp2;char *Cgdcont="AT+CGDCONT=1," / 设 置 PDP 通 道 WDTCTL=WDTPW+WDTCNTCL;Rd_Data(Address,91,Temp_iArray);/读取 0x06 通讯口配置参数。if(Temp_iArray0=0x2f)/ 寻找数据头if(Temp_iArray2=90)&&(Temp_iArray5=0xfd)/ 判断数据 长度、功能码是否为设置命 for(i=0;i<=90;i+)Temp_cArrayi=Temp_iArrayi;Cal_Crc(&Temp_cArray1,88);/ 计算 CRCTemp2=Temp_cArray89;/ 比拟 CRCTemp2=Temp2<<8;Temp2=Temp2+Temp_cArray90;if(CRC二二Temp2)假设CRCf等,那么读出的数据正确。Read_Flag=1; / 从 EEPROM 中 读 取 的 数 据 正 确 。Work_Mode=Temp_cArray6;/ 工作模式for(i=0;iv=i2;i+)读

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1