第8章基于GPRS技术的远程监控系统.docx

上传人:b****7 文档编号:10804645 上传时间:2023-02-23 格式:DOCX 页数:33 大小:40.35KB
下载 相关 举报
第8章基于GPRS技术的远程监控系统.docx_第1页
第1页 / 共33页
第8章基于GPRS技术的远程监控系统.docx_第2页
第2页 / 共33页
第8章基于GPRS技术的远程监控系统.docx_第3页
第3页 / 共33页
第8章基于GPRS技术的远程监控系统.docx_第4页
第4页 / 共33页
第8章基于GPRS技术的远程监控系统.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

第8章基于GPRS技术的远程监控系统.docx

《第8章基于GPRS技术的远程监控系统.docx》由会员分享,可在线阅读,更多相关《第8章基于GPRS技术的远程监控系统.docx(33页珍藏版)》请在冰豆网上搜索。

第8章基于GPRS技术的远程监控系统.docx

第8章基于GPRS技术的远程监控系统

8.5软件设计

本系统的软件设计主要包括以下几个部分:

A/D转换子程序、时钟芯片DS12887初始化子程序、看门狗芯片的初始化及复位子程序、外部控制接点输出子程序、查询外部开关量的状态子程序、网络部分子程序等。

其中网络部分是本模块软件设计相对复杂的部分,也是软件设计的重点部分。

网络部分主要包括以下几个部分:

GPRSMODEM拨号部分、LCP协商部分、IPCP协商部分、查找UDP包部分、UDP解包部分、UDP包的发送部分、短信报警部分等。

下面分别给出主要部分的程序流程图以及相应的源代码,供读者参考。

8.5.1主程序

#include

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineulongunsignedlong

#defineAdd_h0x00

#defineAdd_l0x01

externuchardatabackup_P1;

externucharxdatareceive_buff[256];

externucharxdatacount;

externuintxdatacrc;

externuintxdatappp_s_id;

externucharxdatalocal_ip[4];

externucharxdatahost_ip[4];

voidreset_dog(void);

voidset_system_time(void);

voidout_io(void);

voidsd_connected_prove(void);

voidsend_ad(void);

uchardatabackup_P1;//中断时用来保存片选

ucharxdatareceive_buff[256]_at_0x0101;//256字节的接收缓冲区

ucharxdatalocal_ip[4];

ucharxdatahost_ip[4];

uintxdatacrc=0;

ucharxdatacount=0;//接受数组下表,自动转头

uintxdatappp_s_id=0x3600;

voidcsh_X25045(void);

voidmain(void)

{

ucharxdatah;

ppp_s_id=0x3600;

P1=0x1c;//选中ram

csh_X25045();

baud();//设置波特率

P1=0x1c;

//---------------------------缓冲区清0---------------------------------//

for(h=0;h<255;h++)

receive_buff[h]=0x00;

reset_dog();

initstat_mc35();//setmc35

msg();//找到短信

dail();

confg();//上网

p_service();

sd_connected_prove();

while

(1)

{

P1=0x1c;

reset_dog();

read_io();//读4路io口状态,放入io_state[4]数组

read_ad();//读4路AD数值,放入ad_value[4]数组

P1=0x0D;//选中ds12887,读系统时间,放入date[6]数组

r_ds();

P1=0x1c;

for(h=0;h<100;h++)

{

delays();

find_config_frame();//找udp包

switch(receive_config_frame[35])

{

case0x50:

{send_ad();}break;//发送对应模拟开关量

case0x70:

{set_system_time();}break;

//设置系统时间set_system_time.c

case0x95:

{out_io();}break;//执行开关量io_out.c

default:

_nop_();

}

}

}

}

8.5.2相关的硬件驱动程序

1.延时子程序

voiddelay(uchardataa)//延时程序,延时a个机器周期

{

uchardatab;

for(b=0;b<=a;b++)

_nop_();

}

2.A/D转换子程序

sbitsa_clk=P1^5;

sbitsa_in=P1^7;

sbitsa_out=P1^6;

voiddelay(uchar);

uintread2543(uchardatachannel)//A/D转换子程序read2543

{

uchardataal=0,ah=0;

uintdataad;

uintdatai;

switch(channel)//通道转换

{

case0x01:

{channel=0x00;}break;

case0x02:

{channel=0x01;}break;

case0x03:

{channel=0x04;}break;

case0x04:

{channel=0x05;}break;

default:

{channel=0x00;}break;

}

channel<<=4;

P1=0x08;//使cs=1

P1=0x0E;//使cs=0

sa_out=0;

sa_clk=0;

sa_in=0;

for(i=0;i<12;i++)//把控制字打入2543

{

sa_in=(bit)(channel&0x80);

sa_clk=1;

_nop_();//delay(0x00);

channel<<=1;

sa_clk=0;

_nop_();//delay(0x00);

}

for(i=0;i<4;i++)//取D11,D10,D9,D8

{

sa_out=1;

sa_clk=1;

_nop_();//delay(0x00);

ah<<=1;

if(sa_out)ah|=0x01;

al<<=1;

if(sa_out)al|=0x01;

sa_clk=0;

_nop_();//delay(0x00);

}

P1=0x1c;//选中ram

ad=(uint)ah;ad<<=8;ad|=al;//得到AD值

return(ad);

}

3.外部控制接点输出子程序

sbits_out=P1^7;

sbits_clk=P1^5;

voidout_io(void)

{

s_out=(int)receive_config_frame[39];//第四路输出开关状态,开是0,关是1

s_clk=0;

s_clk=1;

s_out=(int)receive_config_frame[38];//第三路输出开关状态,开是0,关是1

s_clk=0;

s_clk=1;

s_out=(int)receive_config_frame[37];//第二路输出开关状态,开是0,关是1

s_clk=0;

s_clk=1;

s_out=(int)receive_config_frame[36];//第一路输出开关状态,开是0,关是1

s_clk=0;

s_clk=1;

P1=0x0a;//373的LE有效,锁存P1=0x0a;

delay(0x08);

P1=0x09;//373输出P1=0x09

delay(0x08);

P1=0x1c;//选中ram

receive_config_frame[35]=0x00;

}

4.外部开关量查询子程序

sbitD11=P3^3;

sbitD12=P3^2;

sbitD13=P3^5;

sbitD14=P3^4;

ucharxdataio_state[4];

voidread_io(void)

{

D11=1;//读INT1(IO1)状态

if(D11)

{io_state[0]=0x01;}

else

{io_state[0]=0x00;}

D12=1;//读INT0(IO2)状态

if(D12)

{io_state[1]=0x01;}

else

{io_state[1]=0x00;}

D13=1;//读T1(IO3)状态

if(D13)

{io_state[2]=0x01;}

else

{io_state[2]=0x00;}

D14=1;//读T0(IO4)状态

if(D14)

{io_state[3]=0x01;}

else

{io_state[3]=0x00;}

}

8.5.3网络部分子程序

网络部分软件设计是本项目的设计重点,下面将给出详细的软件流程图,同时给出相应的源程序。

参考前面的关键技术分析部分对网络部分的分析,再对照给出的软件流程,相信能给读者提供一定的启发。

程序的流程图如图8-26所示。

图8-26程序流程图

网络部分的源代码如下:

#define_DATATPYE_H

typedefunsignedcharU8;

typedefunsignedintU16;

typedefunsignedlongU32;

typedefsignedcharS8;

typedefsignedintS16;

typedefsignedlongS32;

#defineTRUE1

#defineFALSE0

#defineOK1

#defineFAIL0

#define_LIB_H

#defineDEALY1S1s

#defineUART00

#defineUART11

voidDelay(volatileU16time);

voidPrints(S8*ptr,U8port);

voidPrint(S8*ptr,U8len,U8port);

voidInitMc35(void);

voidPrints(S8*ptr,U8port)

{

while(*str)

{

UartSend(*ptr++,port);

}

}

voidPrint(S8*ptr,U8len,U8port)

{

U8i;

for(i=0;i

UartSend(*ptr++,port)

}

voidPrintBuff(U8*ptr,U8port)

{

for(U8bb=0;bb<2;)

{

if(*ptr==0x7e)

{

bb++;

}

UartSend(*ptr++,port);

}

}

voidInitMc35(void)

{

staticS8splus[]="+++\r\n";

staticS8sATH[]="ATH\r\n";

staticS8sATE0V0Q0[]="ATE0V0Q0\r\n";

staticS8sAT_CMGF[]="AT+CMGF=1\r\n";

staticS8sAT_CGDCONT[]="AT+CGDCONT=1,\"IP\",\"gzeunt.gd\"\r\n";

staticS8sATDT[]="ATDT*99***1#\r\n";

/******************************send+++twice**********************************/

Prints(splus,UART0);

Delay(DELAYTIME);

Prints(splus,UART0);

Delay(DEALY1S);

/************************send"ATH",waitMC35answer300D**********************/

do

{

Prints(sATH,UART0);

Delay(DEALY1S);

}while(!

((uart0RevBuff[uart0Count-2]==0x30)&&(uart0_revbuff[uart0_count-1]==0x0D)));

uart0RevBuff[uart0Count-2]=0;

uart0RevBuff[uart0Count-1]=0;

/*********************send"ATE0V0Q0",waitmc35answer300D*******************/

do

{

Prints(sATE0V0Q0,UART0);

Dealy(DELAY1S);

}while(!

((uart0RevBuff[uart0Count-2]==0x30)&&(uart0_revbuff[uart0_count-1]==0x0D)));

uart0RevBuff[uart0Count-2]=0;

uart0RevBuff[uart0Count-1]=0;

/*************setMSMmessageformattoTEXTmodelAT+CMGF=1******************/

do

{

Prints(sAT_CMGF,UART0);

Delay(DEALY1S);

}while(!

((uart0RevBuff[uart0Count-2]==0x30)&&(uart0_revbuff[uart0_count-1]==0x0D)));

uart0RevBuff[uart0Count-2]=0;

uart0RevBuff[uart0Count-1]=0;

/*******************SetAPN"AT+CGDCONT=1,"IP","gzeunt.gd"\r\n"*****************/

do

{

Prints(sAT_CGDCONT,UART0);

Delay(DEALY1S);

}while(!

((uart0RevBuff[uart0Count-2]==0x30)&&(uart0_revbuff[uart0_count-1]==0x0D)));

uart0RevBuff[uart0Count-2]=0;

uart0RevBuff[uart0Count-1]=0;

/*********************setGPRSsevice“ATDT*99***1#”*************************/

do

{

Prints(sATDT,UART0);

Delay(DEALY1S);

}while(!

((uart0RevBuff[uart0Count-2]==0x30)&&(uart0_revbuff[uart0_count-1]==0x0D)));

uart0RevBuff[uart0Count-2]=0;

uart0RevBuff[uart0Count-1]=0;

}

/*****************************transfermeaning*******************************/

/*author:

muyidate:

2004.4.20

*rework:

date:

2004.11.1

*function:

thedatasbetweenthestartandend7enotincludingthestartandendthemselveswhichare0x7e0x7dor<=0x20

*shouldbetransferred.Thesixthbitofthedatashoudbesettoitslogicalopposition;

*example:

bit8bit7bit6bit5bit4bit3bit2bit1

*7e01111110

*ransfer~

*5e01011110

*/

voidTransferMeaning(U8*p_nontransfer,U8len)

{

U8*p_transfer=uart0SendBuff;

*p_transfer=*p_nontransfer;//0x7e

p_nontransfer++;

p_transfer++;

for(;(len-2)>0;len--)

{

if((*p_nontransfer==0x7e)||(*p_nontransfer==0x7d)||(*p_nontransfer<=0x20))

{

*p_transfer=0x7d;

p_transfer++;

*p_transfer=(((*p_nontransfer&0x20)==0x00)?

(*p_nontransfer|0x20):

(*p_nontransfer&0xdf));

}

else

{

*p_transfer=*p_nontransfer;

}

p_transfer++;

p_nontransfer++;

}

*p_transfer=*p_nontransfer;//0x7e;

}

/*************************************crc*************************************/

/*author:

netdate:

2004.10.29

*rework:

muyidate:

2004.11.1

*function:

thisisaCRC16'sarithmeticbycheckingtheconstarrycrctab16[],themain()isfortestonly

*example:

7EFF03C0210806001080FD0105000A12060000000174637E

*thecrcoftheabovepppframeshouldbecaculatefrom0xffto0x01,andthelengthis20.

*IO:

*/

constU16crctab16[]=

{

0x0000,0x1189,0x2312,0x329b,0x4624,0x57ad,0x6536,0x74bf,

0x8c48,0x9dc1,0xaf5a,0xbed3,0xca6c,0xdbe5,0xe97e,0xf8f7,

0x1081,0x0108,0x3393,0x221a,0x56a5,0x472c,0x75b7,0x643e,

0x9cc9,0x8d40,0xbfdb,0xae52,0xdaed,0xcb64,0xf9ff,0xe876,

0x2102,0x308b,0x0210,0x1399,0x6726,0x76af,0x4434,0x55bd,

0xad4a,0xbcc3,0x8e58,0x9fd1,0xeb6e,0xfae7,0xc87c,0xd9f5,

0x3183,0x200a,0x1291,0x0318,0x77a7,0x662e,0x54b5,0x453c,

0xbdcb,0xac42,0x9ed9,0x8f50,0xfbef,0xea66,0xd8fd,0xc974,

0x4204,0x538d,0x6116,0x709f,0x0420,0x15a9,0x2732,0x36bb,

0xce4c,0xdfc5,0xed5e,0xfcd7,0x8868,0x99e1,0xab7a,0xbaf3,

0x5285,0x430c,0x7197,0x601e,0x14a1,0x0528,0x37b3,0x263a,

0xdecd,0xcf44,0xfddf,0xec56,0x98e9,0x8960,0xbbfb,0xaa72,

0x6306,0x728f,0x4014,0x519d,0x2522,0x34ab,0x0630,0x17b9,

0xef4e,0xfec7,0xcc5c,0xddd5,0xa96a,0xb8e3,0x8a78,0x9bf1,

0x7387,0x620e,0x5095,0x411c,0x35a3,0x242a,0x16b1,0x0738,

0xffcf,0xee46,0xdcdd,0xcd54,0xb9eb,0xa862,0x9af9,0x8b70,

0x8408,0x9581,0xa71a,0xb693,0xc22c,0xd3a5,0xe13e,0xf0b7,

0x0840,0x19c9,0x2b52,0x3adb,0x4e64,0x5fed,0x6d76,0x7cff,

0x9489,0x8500,0xb79b,0xa612,0xd2ad,0xc324,0xf1bf,0xe036,

0x18c1,0x0948,0x3bd3,0x2a5a,0x5ee5,0x4f6c,0x7df7,0x6c7e,

0xa50a,0xb483,0x8618,0x9791,0xe32e,0xf2a7,0xc03c,0xd1b5,

0x2942,0

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

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1