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

📄 gprs.h

📁 pic18f6520上运行的gprs通讯处理程序
💻 H
字号:

/***********************************************************
PIC18f452 port define
***********************************************************/

#define	SIG_Lap		PORTAbits.RA4

#define RING_2		PORTBbits.RB1

#define	PWR_Lap		PORTCbits.RC1
#define DSR_1		PORTCbits.RC0
#define TXD_1		PORTCbits.RC6
#define RXD_1		PORTCbits.RC7

#define SIM_ON		PORTEbits.RE2
#define RST_2		PORTEbits.RE3

#define TXD_2		PORTGbits.RG1
#define RXD_2		PORTGbits.RG2


//------------------------------------------------------------

#define	SIG_Lap_IO	TRISAbits.TRISA4
#define	PORTA_INIT	0X10
#define	TRISA_INIT	0X00

#define RING_2_IO	TRISBbits.TRISB1	//L	(effect level)
#define	PORTB_INIT	0X00
#define	TRISB_INIT	0X02

#define	PWR_Lap_IO	TRISCbits.TRISC1
#define DSR_1_IO	TRISCbits.TRISC0
#define TXD_1_IO	TRISCbits.TRISC6
#define RXD_1_IO	TRISCbits.TRISC7
#define	PORTC_INIT	0XC1
#define	TRISC_INIT	0Xbc

#define	PORTD_INIT	0X00
#define	TRISD_INIT	0X00

#define SIM_ON_IO	TRISEbits.TRISE2
#define RST_2_IO	TRISEbits.TRISE3
#define	PORTE_INIT	0X0c
#define	TRISE_INIT	0X00

#define	PORTF_INIT	0X00
#define	TRISF_INIT	0X00

#define TXD_2_IO	TRISGbits.TRISG1
#define RXD_2_IO	TRISGbits.TRISG2
#define	PORTG_INIT	0X06
#define	TRISG_INIT	0X04


/**********************************************************
PIC ACCESS RAM区设置(0X4C---0X5F)
可以直接寻址区
***********************************************************/
#pragma udata  access  segdata = 0x0034	

	near ram volatile unsigned char	R0,R1,R2,R3,Rint0,Rint1;	//公用变量

	near ram volatile union{
		volatile signed   char		Schar[4];
		volatile unsigned char 		Uchar[4];
		volatile unsigned char		*Uchp;
		volatile signed	  int		Sint;
		volatile unsigned int		Uint;
		volatile unsigned int		*Uintp;
		volatile short	  long		Slong_s;
		volatile unsigned short long	Ulong_s;
		volatile unsigned short long	*Ulong_sp;
		volatile signed	  long		Slong;
		volatile unsigned long		Ulong;
		volatile unsigned long		*Ulongp;
		volatile double			Sdouble;
		volatile double			*Sdoublep;
	}temp1,temp2,temp3,temp4,tempINT;				//以上是公用变量

/***********************************************************
主程序中IIC子程序中公用变量(共计10个字节)
***********************************************************/
	near ram volatile union
	{
		struct
		{
			unsigned :2;
			unsigned cnt:1;
			unsigned iicbusy:1;
			unsigned A0:1;
			unsigned A1:1;
			unsigned iic64:1;
			unsigned noack:1;
		}bits;
		near ram volatile unsigned char ch;
	}IICFLAG;				//IIC acknowledge flag
	
	near ram volatile unsigned char subah;    		//
	near ram volatile unsigned char subal;    		//
	near ram volatile unsigned char IICNUM;
	near ram volatile unsigned char IIC_TEMP;
	near ram volatile unsigned char IICBUF;
	
	volatile unsigned char *near ram IICMEM;
	volatile unsigned char *near ram IIC1MEM;		//以上是内部EEPROM操作变量
	
	
	near ram volatile union
	{
		struct
		{
		unsigned	:1;		//
		unsigned	RXING:1;		//处于发送状态
		unsigned	FramErr:1;		//处于接收状态
		unsigned	AFrame:1;		//正确接收一帧数据
		unsigned	rec0D:1;		//收到0x0d字符
		unsigned	BUF_full:1;		//缓冲区满
		unsigned	BUF_over:1;		//缓冲区溢出
		unsigned	recTS:1;		//收到‘〉’(提示符)
		}bits;
		near ram volatile unsigned char ch;
	}COMFG1,COMFG2;					//1代表外串口,2代表模块串口
	
	near ram volatile union
	{
		struct
		{
		unsigned	TSsign:1;		//收到提示符
		unsigned	OKend:1;		//收到0x30,0x0d 即OK
		unsigned	ERRend:1;		//收到0x34,0x0d 即ERROR
		unsigned	unknow:1;		//收到未知通讯贞
		unsigned	Contin:1;		//通讯贞没有收完毕
		unsigned	cmgd:1;			//处理过一条短信,要求删除该短信
		unsigned	CMEERR:1;		//收到"ERROR"
		unsigned	SendMS:1;		//收到短信发送回应
		}bits;
		near ram volatile unsigned char ch;
	}ATFrameFG,SFrameFG;				//ATFrameFG:模块串口接收数据处理结果
							//SFrameFG:外串口接收数据处理结果,仅使用unknow,Contin位
	near ram volatile union
	{
		struct
		{
		unsigned	InitErr:1;		//初始化错误
		unsigned	Online:1;		//在线标志
		unsigned	Ring:1;			//有电话接入
		unsigned	NoSIM:1;		//无SIM卡
		unsigned	NetERR:1;		//电信网络故障
		unsigned	NewMS:1;		//受到新短信
		unsigned	NetWeek:1;		//网络信号弱
		unsigned	TestMS:1;		//要求测试短信纪录
		}bits;
		near ram volatile unsigned char ch;
	}WorkFG;					//GPRS模块工作状态
	
	near ram volatile union
	{
		struct
		{
		unsigned	IPDing:1;		//正在传输下行数据(GPRS==>外串口)
		unsigned	ATing:1;		//正在发送AT指令
		unsigned	DATAing:1;		//正在传输上行数据
		unsigned	HDing:1;		//正在发送ID号
		unsigned	Tranning:1;		//有数据需上传(发送AT指令,发送ID号,传输上行数据)
		unsigned	IPchange:1;		//服务器IP变化,重新连接
		unsigned	WaitTS:1;		//等待提示符
		unsigned	cipstart:1;		//正在发送ATcipstart指令,
		}bits;
		near ram volatile unsigned char ch;
	}SendATFG;
	
#pragma udata


#pragma udata  SegData0=0x0060		//

	volatile unsigned char	HeadCS[3];		//固定数据“ID:”,为满足ID格式
	volatile unsigned char	HeadID[14]; 		//ID号,空格结束
	volatile unsigned char	ServerCODE[15];		//服务器IP地址 xxx.xxx.xxx.xxx
	volatile unsigned char	ServerJYH;		//未用

	volatile unsigned char	RXFREETMR1;		//串行通信free timer,未用
	volatile unsigned char	RXOVERTMR1;		//接收字间计时器
	volatile unsigned char	TXOVERTMR1;		//发送字间计时器
	volatile unsigned char	BufJYH1;		//计算发送校验和,未用
	volatile unsigned int	TXSAVED1;		//一帧已发送字节数
	
	volatile unsigned char	RXFREETMR2;		//同外串口含义
	volatile unsigned char	RXOVERTMR2;
	volatile unsigned char	TXOVERTMR2;
	volatile unsigned char	BufJYH2;
	volatile unsigned int	TXSAVED2;		//
	volatile unsigned int	IPDlen;			//收到GPRS传来数据长度,即要从外串口发送出去的数据长度
	
	volatile union
	{
		volatile unsigned char	*pt;
		volatile unsigned long	*lpt;
		volatile unsigned int	data;
	}RXpt1,						//外串口接受指针
	TXpt1,						//发送指针
	Framept1,					//需处理数据起始指针
	FrameEnd1,					//本通讯贞结束指针
	FrameErr1,					//错误通讯贞的结束地址
	RXpt2,TXpt2,Framept2,FrameEnd2,FrameErr2,	//模块串口,同外串口含义
	RXptbak;					//临时指针变量
	
	volatile union
	{
		struct
		{
		unsigned	Have1SEC:1;
		unsigned	IPDtran:1;
		unsigned	Connecting:1;
		unsigned	dispErr:1;	//
		unsigned	ConnectOk:1;	//
		unsigned	ConnectOkEN:1;	//
		unsigned	:1;		//
		unsigned	:1;		//
		}bits;
		volatile unsigned char ch;
	}GeneralFlag1;
#define	Have1SEC	GeneralFlag1.bits.Have1SEC	//秒标志
#define	IPDtran		GeneralFlag1.bits.IPDtran	//有数据要从外串口发送出去标志
#define	Connecting	GeneralFlag1.bits.Connecting	//在线,即是否与服务器建立连接
#define	dispErr		GeneralFlag1.bits.dispErr	//信号灯控制
#define	ConnectOk	GeneralFlag1.bits.ConnectOk	//与服务器建立连接成功
#define	ConnectOkEN	GeneralFlag1.bits.ConnectOkEN	//是否从未成功连接服务器,以便首次连接发送ID

	volatile union
	{
		struct
		{
		unsigned	enID:1;		//是否发ID
		unsigned	enTest:1;	//是否发信跳
		unsigned	Com1Bit9:1;	//是否带校验位
		unsigned	:1;	//
		unsigned	:1;		//
		unsigned	:1;		//
		unsigned	:1;		//
		unsigned	:1;		//
		}bits;
		volatile unsigned char ch;
	}CONFIGFG;

	volatile unsigned char	Com1BPS;		//外串口波特率
	volatile unsigned char	MSindex[2],		//待处理短信存储位置
				ClockTMR,		//累计中断次数,产生秒信号
				Mode,			//工作方式选择,未用
				Com1Sec,		//外串口未收到数据的秒数,超过62秒重新初始化外串口,
				Com2Sec,		//模块串口未收到数据的秒数,超过62秒重新初始化模块串口,
				SetReSec,		//重新连接的秒数(设定)
				SetMinTest;		//信跳间隔(设定值),分钟
	volatile unsigned char	SecCnt,			//秒计时
				SecErr,			//程序主循环没有正常执行的秒数,超过10秒,MCU重起(硬复位)
				ReDialCnt;		//未能成功连接的次数,超过3次,MCU重起(硬复位)
	volatile unsigned char	MinTest,		//信跳间隔计时
				SecRedail;		//重新连接秒计时
	volatile unsigned char	ATBUF[32];		//AT指令buffer
	volatile unsigned char	BFIIC[32];		//公用buffer
	volatile unsigned char	NetRssi,NetBer;		//电信网络信号强度,误码率
	

	
#pragma udata


#define		COMBUF1_st	0x0100
#define		COMBUF1_end	0x03f0
#define		COMBUF1_size	0x02f0

#pragma udata  SegData1=0x0100		//
	volatile unsigned char	COMBUF1[256];	//串行通讯数据缓冲区
#pragma udata

#pragma udata  SegData1a=0x0200		//
	volatile unsigned char	COMBUF1a[256];	//串行通讯数据缓冲区
#pragma udata

#pragma udata  SegData1b=0x0300		//
	volatile unsigned char	COMBUF1b[245];	//串行通讯数据缓冲区
#pragma udata


#define		COMBUF2_st	0x0400
#define		COMBUF2_end	0x06f0
#define		COMBUF2_size	0x02f0

#pragma udata  SegData2=0x0400		//
	volatile unsigned char	COMBUF2[256];	//串行通讯数据缓冲区
#pragma udata
#pragma udata  SegData2a=0x0500		//
	volatile unsigned char	COMBUF2a[256];	//串行通讯数据缓冲区
#pragma udata
#pragma udata  SegData2b=0x0600		//
	volatile unsigned char	COMBUF2b[245];	//串行通讯数据缓冲区
#pragma udata


#define	MODE_MS		'M'
#define	MODE_GPRS	'G'
#define	CS_rssi		6		//-101db
#define	CS_ber		3		//

#define	PIE1_init	0x20		// RC1IE
#define PIE3_init	0x20		// RC2IE
#define	T0CON_init	0b11000100	//timer0 ON/8bits/1:32预分频器

#define	SPBRG2_init	25	//12
#define	TXSTA2_init	0x04		//sbgH=1 , tx9=0
#define	RCSTA2_init	0x90		//SPEN,CREN=1, RX9=0

//芯片内部EEPROM地址定义

#define AT_IPadr	0x10		
#define	AT_IPport	0x20
#define	AT_PASS		0x30
#define	AT_MODE		0x38
#define	AT_Com1BPS	0x39
#define	AT_CONFIGFG	0x3a
#define	AT_TestLong	0x3c		//min
#define	AT_SetReSec	0x3e		//
#define	AT_HeadID	0x40		//headID max 14bytes

⌨️ 快捷键说明

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