最新日志

发表于:2007-8-22 11:06:11
标签:操作系统  rtos  

0

一个51下的源代码开放的操作系统small_rtos

rar

一个51下的源代码开放的操作系统small_rtos.rar

点击此处查看原文 >>

系统分类: 生活点滴   |    用户分类:    |    来源: 整理

评论(0) | 阅读(669)
发表于:2007-8-21 15:33:54
评论(2) | 阅读(1105)
发表于:2007-8-8 13:03:32
标签:无标签

0

Protel99se增加鼠标滚轮放大缩小功能

zip

Protel99se增加鼠标滚轮放大缩小功能

点击此处查看原文 >>

系统分类: 资源共享   |    用户分类:    |    来源: 整理

评论(0) | 阅读(630)
发表于:2007-8-6 10:51:26
标签:串口  并口  引脚  

0

串口 并口引脚定义

RJ45接口信号定义,以及网线连接头信号安排

以太网 10/100Base-T 接口:
Pin Name Description
1 TX+ Tranceive Data+ (发信号+)
2 TX- Tranceive Data- (发信号-)
3 RX+ Receive Data+ (收信号+)
4 n/c Not connected (空脚)
5 n/c Not connected (空脚)
6 RX- Receive Data- (收信号-)
7 n/c Not connected (空脚)
8 n/c Not connected (空脚)

以太网 100Base-T4 接口:
Pin Name Description
1 TX_D1+ Tranceive Data+
2 TX_D1- Tranceive Data-
3 RX_D2+ Receive Data+
4 BI_D3+ Bi-directional Data+
5 BI_D3- Bi-directional Data-
6 RX_D2- Receive Data-
7 BI_D4+ Bi-directional Data+
8 BI_D4- Bi-directional Data-

1 white/orange
2 orange/white
3 white/green
4 blue/white
5 white/blue
6 green/white
7 white/brown
8 brown/white

注:RJ45接口采用差分传输方式,tx+、tx-是一对双绞线,拧在一起可以减少干扰。

RS-232接口引脚定义

RS-232接口又称之为RS-232口、串口、异步口或一个COM(通信)口,严格地讲RS-232接口是DTE(数据终端设备)和DCE(数据通信设备)之间的一个接口,DTE包括计算机、终端、串口打印机等设备。DCE通常只有调制解调器(MODEM)和某些交换机COM口是DCE。标准指出DTE应该拥有一个插头(针输出),DCE拥有一个插座(孔输出)。

点击看大图

 

串口、并口接口定义

并行口与串行口的区别是交换信息的方式不同,并行口能同时通过8条数据线传输信息,一次传输一个字节;而串行口只能用1条线传输一位数据,每次传输一个字节的一位。并行口由于同时传输更多的信息,速度明显高于串行口,但串行口可以用于比并行口更远距离的数据传输。

1、25针并行口插口的针脚功能:

    针脚 功能 针脚 功能

  1 选通 (STROBE低电平) 10 确认 (ACKNLG低电平)

  2 数据位0 (DATAO) 11 忙 (BUSY)

  3 数据位1 (DATA1) 12 却纸 (PE)

  4 数据位2 (DATA2) 13 选择 (SLCT)

  5 数据位3 (DATA3) 14 自动换行 (AUTOFEED低电平)

  6 数据位4 (DATA4) 15 错误观点(ERROR低电平)

  7 数据位5 (DATA5) 16 初始化成(INIT低电平)

  8 数据位6 (DATA6) 17 选择输入 (SLCTIN低电平)

  9 数据位7 (DATA7) 18-25 地线路(GND)

  2.串行口的典型代表是RS-232C及其兼容插口,有9针和25针两类。25针串行口具有20mA电流环接口功能,用9、11、18、25针来实现。其针脚功能如下:

  针脚 功能 针脚 功能

  1 未用

  2 发出数据(TXD) 11 数据发送(一)

  3 接受数据(RXD) 12-17 未用

  4 请求发送(RTS) 18 数据接收(+)

  5 清除发送(CTS) 19 未用

  6 数据准备好(DSR) 20 数据终端准备好比(DTR)

  7 信号地线路 (SG) 21 未用

  8 载波检测 (DCD) 22 振铃指示精神 (RI)

  9 发送返回(+) 23-24 未用

  10 未用 25 接收返回(一)

  9针串行口的针脚功能:

  针脚 功能 针脚 功能

  1 载波检测(DCD) 6 数据准备好(DSR)

  2 接受数据(RXD) 7 请求发送(RTS)

  3 发出数据(TXD) 8 清除发送(CTS)

  4 数据终端准备好(DTR) 9 振铃指示(RI)

  5 信号地线(SG)

点击看大图

 

点击此处查看原文 >>

系统分类: 汽车电子   |    用户分类:    |    来源: 整理

评论(0) | 阅读(2493)
发表于:2007-8-1 14:03:57
标签:无标签

0

单片机与GPRS模块通讯开发的注意事项

        单片机微控制器以其体积小、功耗低、使用方便等特点,广泛应用于各种工业、民用的嵌入式系统中;而随着互联网(Internet)的兴起与普及,使微控制器通过互联网传送数据就变得非常有意义。目前使微控制器上网的解决方案一般有两种:一种是采用微控制器驱动网卡,通过以太网连接Internet;另一种是使微控制器直接驱动调制解调器(MODEM)通过电话线向ISP拨号上网。这两种方案的缺点在于都要使用有线的网络,无法应用于在边远地区或可移动系统中。

针对这一问题,提出一种基于GPRS的单片机上网的解决方案,即在单片机中实现PPP协议,并通过驱动GPRS模块经过GPRS无线网连接到Internet实现上网。这种方案的优点在于:① 覆盖面广,适用于广大偏远地区;② 无线上网,适用于可移动目标;③使用廉价的微控制器实现简单、成本低;④ 安装简便,维护方便。

GPRS技术及其特点

  GPRS(General Packet Radio Service)是通用分组无线业务的简称,是在GSM基础上发展起来的一种分组交换的数据承载和传输方式。与原有的GSM比较,GPRS在数据业务的承载和支持上具有非常明显的优势:通过多个GSM时隙的复用,支持的数据传输速率更高,理论峰值达115kb/s;不同的网络用户共享同一组GPRS信道,但只有当某一个用户需要发送或接收数据时才会占用信道资源。这样,通过多用户的业务复用,更有效地利用无线网络信道资源,特别适合突发性、频繁的小流量数据传输,很好地适应数据业务的突发性特点;GPRS计费方式更加灵活,可以支持按数据流量来进行计费;与无线应用协议(WAP)技术不同,GPRS能够随时为用户提供透明的IP通道,可直接访问Internet中的所有站点和资源;采用信道复用技术,每一个GPRS用户都能够实现永远在线;另外,GPRS还能支持在进行数据传输的同时进行语音通话等等,而且相对于短消息等其它无线数据通信业务,GPRS的价格优势比较明显。目前,我国移动推出的GPRS上网业务最高每千字节也只有3分钱,而且用户可以根据自己的需要,以月租、包月等多种形式进一步降低GPRS通信的费用。
因此使用GPRS实现远程数据的传送是非常经济实用的,特别是对于不易架设有线网络的边远地区和可移动装置。

硬件连接和GPRS模块设置

  通过GPRS网进行数据传输一般需要使用GPRS模块。目前,GPRS模块一般是指带有GPRS功能的GSM模块,可以利用GPRS网进行数据通信。
其中比较流行的有法国Wave公司的WISMO系列和西门子公司的S系列等等。WAVECOM的WISMO模块接口简单、使用方便且功能非常强大
  其中GPRS模块与单片机间是通过串行口进行通信的,通信速率最快可以达到115 200b/s。模块与控制器间的通信协议是AT命令集,其中大部分命令是符合协议“AT command set for GSM Mobile Equipment (ME) (GSM 07.07 version 6.4.0 Release 1997)”的,但也有一些是Wavecom自己定义的AT命令。除了串口发送(TX)、串口接收(RX)之外,微控制器与GPRS模块之间还有一些硬件握手信号,如DTR、CTS、DCD等。
为了简化微控制器的控制,硬件设计时不要使用全部的硬件握手信号,而只使用数据载波检测(Data Carrier Detect, DCD)和终端准备(Data Terminal Ready, DTR)信号。
DCD信号可以检测GPRS模块是处于数据传送状态还是处于AT命令传送状态。
DTR信号用来通知GPRS模块传送工作已经结束。

  硬件连接完成后,在进行GPRS上网操作之前,首先要对GPRS模块进行一定的设置。主要的设置工作有:
① 设置通信波特率,可以使用AT+IPR=38400命令,把波特率设为38 400b/s或其它合适的波特率,默认的通信速度为9600b/s。
② 设置接入网关,通过AT+ CGD CONT="1", “IP”, “CMNET”命令设置GPRS接入网关为移动梦网。
③设置移动终端的类别,通过AT+CGCLASS=“B”设置移动终端的类别为B类,即同时监控多种业务;但只能运行一种业务,即在同一时间只能使用GPRS上网,或者使用GSM的语音通信。
④ 测试GPRS服务是否开通,使用AT+CGACT=1,1命令激活GPRS功能。如果返回OK,则GPRS连接成功;如果返回ERROR,则意味着GPRS失败。这时应检查一下SIM卡的GPRS业务是否已经开通,GPRS模块天线是否安装正确等问题。
 中国移动在GPRS与Internet网中间建立了许多相当于ISP的网关支持节点(GGSN),以连接GPRS网与外部的Internet网。GPRS模块可以通过拨“*99***1#”登录到GGSN上动态分配到Internet网的IP地址。其间GPRS模块与网关的通信要符合点对点协议(Point to Point Protocol, PPP),其中身份验证时用户名、密码都为空。使用PPP协议登录上之后,就可以通过GGSN接上Internet了。

软件整体结构

  程序中的所有代码最好采用C语言编写,并采用分层的结构,从底到上分别为:串口驱动层、GPRS模块驱动层、PPP协议层、IP协议层、UDP协议层与应用层。上层函数的实现需要应用到底层函数,而底层函数的任务就是为上层函数提供服务,最终完成应用层任务——传送数据。

驱动程序编写

 首先是串行口驱动层。它实现打开串口、关闭串口、读串口数据、写串口数据等函数。然后,在这些串口函数的基础上编写GPRS模块的驱动函数。单片机通过串行口控制GPRS模块,进行拨号、设置等操作。控制的方法是采用AT命令。
在控制GPRS模块拨打移动梦网GGSN的登录号码“*99***1#”之后,GPRS模块就转入在线模式(On-Line)。此时单片机向串行口发送的所有数据都透明地传送给了GGSN,同样GGSN的回答也传回单片机的串行口。
当数据传送完成后,单片机需要通知GPRS模块结束会话,并从在线模式转回普通的命令模式,这可以通过置高DTR线完成。同时,如果线路由于异常断开,CD线会回复到平常的低电平,所以处于在线模式下也要不断检测CD线是否处于高电平。根据这些操作,可以编写GPRS驱动函数:初始化GPRS模块函数、拨号函数、断开连接函数、检测是否处于在线状态函数。
 这些底层的驱动函数将会使上层协议的编写很方便,更重要的是,它为我们提供了一个驱动抽象层。当底层硬件做出改动的时候,只需要对底层的驱动函数进行改动,而上层函数的代码不变。

PPP协议的实现

  由于移动梦网的GGSN与GPRS模块通信时遵循PPP协议,所以要在单片机中也实现一部分PPP协议才能与之对话。GPRS模块在拨号后首先要与GPRS网关进行通信链路的协商,即协商点到点的各种链路参数配置。协商过程遵守LCP(Link Control Protocol)、PAP(Password Authentication Protocol)和IPCP(Internet Protocol Control Protocol)等协议。其中LCP协议用于建立、构造、测试链路连接;PAP协议用于处理密码验证部分;IPCP协议用于设置网络协议环境,并分配IP地址。协商机制用有限状态机的模型来实现。一旦协商完成,链路已经创建,IP地址已经分配就可以按照协商的标准进行IP报文的传输了。根据应用的不同,IP报文中可以携带UDP报文,也可以是TCP或ICMP报文。本系统正是采用UDP报文传送数据信息的。数据传输完成之后,单片机会向GGSN发送LCP的断开连接报文,以终止网络连接。

  PPP协议的帧结构(图略)。单片机的串口中断接收程序首先以包起始和结束符来判断是否有完整的PPP包,并对PPP包的内容进行校验,以确定数据包的完整性和正确性。然后,在主循环中进入PPP报文解析模块。

登录GGSN的过程

  系统的一个难点是单片机登陆GPRS网关(GGSN)并与网关通过LCP、PAP、IPCP协议进行协商的过程。LCP、PAP与IPCP协议的帧结构大同小异,最常用的为请求(REQ)、同意(ACK)和拒绝(NAK)三种帧。单片机与GGSN各为一方进行协商,任何一方都可以发送REQ帧请求某方面的配制,另一方觉得配置不能接受会回应NAK帧,如果可以则回应ACK帧。为了节省资源,我们只处理这三种数据帧,其它链路问题都由单片机在程序控制下自己重新拨号解决。

 协商过程大致描述如下:在拨号成功连接后,GGSN首先会返回一个PAP REQ数据帧。我们发送一个空LCP REQ帧,以强迫进行协议协商阶段。随后,GGSN发送LCP设置帧,我们拒绝所有的设置并请求验证模式。GGSN选择CHAP或PAP方式验证,我们只接受PAP方式。然后,进行PAP验证用户名和密码过程,在GPRS中用户名与密码都为空,如果成功,GGSN会返回IPCP报文分配动态IP地址。此时,就完成了与GGSN的协商过程。协商过程的状态转换如图4所示。

  协商完成后进入IP数据报通信阶段。此时,单片机向GGSN发送的所有包含IP报文的PPP报文都会被传送给Internet网中相应的IP地址;而远端所有向单片机IP地址发送的报文也都会经GPRS网传送到单片机上,从而完成单片机与远程主机通过互联网的数据传输。

点击此处查看原文 >>

系统分类: 生活点滴   |    用户分类:    |    来源: 整理

评论(2) | 阅读(1436)
发表于:2007-7-30 9:15:45
标签:ASCII  码表  

0

ASCII码表

第0~32号及第127号(共34个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BEL(振铃)等;
通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;

第33~126号(共94个)是字符,其中第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。

注意:在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。
为了便于查询,以下列出ASCII码表:

DEC(十进制) HEX(十六进制) CHAR(字符) CODE(控制码) C 程序(转义)
0 00 (零零)   NUL ('\0')
1 01   SOH  
2 02   STX  
3 03   ETX  
4 04   EOT  
5 05   ENQ  
6 06   ACK  
7 07   BEL ('\a')
8 08   BS ('\b')
9 09   HT ('\t')
10 0A   LF ('\n')
11 0B   VT ('\v')
12 0C   FF ('\f')
13 0D   CR ('\r')
14 0E   SO  
15 0F   SI  
16 10   DLE  
17 11   DC1  
18 12   DC2  
19 13   DC1  
20 14   DC4  
21 15   NAK  
22 16   SYN  
23 17   ETB  
24 18   CAN  
25 19   EM  
26 1A   SUB  
27 1B   ESC  
28 1C   FS  
29 1D   GS  
30 1E   RS  
31 1F   US  
32 20 (space,空格)    
33 21 !    
34 22 "    
35 23 #    
36 24 $    
37 25 %    
38 26 &    
39 27 '    
40 28 (    
41 29 )    
42 2A *    
43 2B +    
44 2C ,    
45 2D -    
46 2E .    
47 2F /    
48 30 0    
49 31 1    
50 32 2    
51 33 3    
52 34 4    
53 35 5    
54 36 6    
55 37 7    
56 38 8    
57 39 9    
58 3A :    
59 3B ;    
60 3C <    
61 3D =    
62 3E >    
63 3F ?    
64 40 @    
65 41 A    
66 42 B    
67 43 C    
68 44 D    
69 45 E    
70 46 F    
71 47 G    
72 48 H    
73 49 I    
74 4A J    
75 4B K    
76 4C L    
77 4D M    
78 4E N    
79 4F O    
80 50 P    
81 51 Q    
82 52 R    
83 53 S    
84 54 T    
85 55 U    
86 56 V    
87 57 W    
88 58 X    
89 59 Y    
90 5A Z    
91 5B [    
92 5C \   ('\\')
93 5D ]    
94 5E ^    
95 5F _    
96 60 `    
97 61 a    
98 62 b    
99 63 c    
100 64 d    
101 65 e    
102 66 f    
103 67 g    
104 68 h    
105 69 i    
106 6A j    
107 6B k    
108 6C l    
109 6D m    
110 6E n    
111 6F o    
112 70 p    
113 71 q    
114 72 r    
115 73 s    
116 74 t    
117 75 u    
118 76 v    
119 77 w    
120 78 x    
121 79 y    
122 7A z    
123 7B {    
124 7C |    
125 7D }    
126 7E ~    
127 7F   DEL  

点击此处查看原文 >>

系统分类: 生活点滴   |    用户分类:    |    来源: 无分类

评论(0) | 阅读(5639)
发表于:2007-7-27 9:38:26
标签:数据压缩  GPS数据格式  压缩预处理  半字节压缩算法  

0

GPS定位数据压缩算法的设计与实现

GPS定位数据压缩算法的设计与实现
北京清华大学自动化系(100084) 杨宏业 张跃

摘要:为了解决嵌入式GPS车载系统中存储空间小、GPS定位数据量大的矛盾,根据GPS定位数据的特点,提现了专用于GPS定位数据压缩的改进型半字节压缩算法。该算法是一种在原半字压缩算法的基础上改进的算法,经过实际测试,压缩比可达50%。若将压缩预处理也折算在内,总压缩比可达80%以上,为车载系统节省了大量的存储资源。除此之外,也缩短了GSM信道的占用时间,大大地缓解了向控制调度中心上传数据的压力。
关键词:数据压缩 GPS数据格式 压缩预处理 半字节压缩算法

 

嵌入式GPS车载系统一般体积较小,无存储量大的硬盘等设备,系统程序、应用程序一般装在FLASH或ROM中。由于FLASH 或 ROM等存储介质的价格相对台式机上广泛使用的硬盘、光盘等来说是非常昂贵的,因此,在开发嵌入式系统的软件产品时必须将软件所占的存储空间限制在一定的范围内。
在GPS车载系统的研发过程中,主要需解决的问题是:车载系统为了实现自导航,必须储存大量的GPS定位数据(每天需要存储约6MB);其二是这些数据还要通过GSM信道上传到控制调度中心(若通过短信业务发送,每次160B,则需要每分上传6次)。无疑,数据压缩是在不增加硬件成本的前提下,从软件的角度来充分发挥系统现有资源的有效办法。
数据压缩方法种类繁多,可以分为无损压缩和有损压缩两大类。无损压缩利用数据的统计冗余进行压缩,可完全恢复原始数据而不引入任何失真,但压缩率受到数据统计冗余度的理论限制,一般为2:1到5:1。这类方法广泛用于文本数据、程序和特殊应用场合的图像数据(如指纹图像、医学图像等)的压缩。有损压缩方法利用了人类视觉对图像中的某些频率成分不敏感的特性,允许压缩过程中损失一定的信息。虽然不能完全恢复原始数据,但是所损失的部分对理解原始图像的影响较小,却换来了大得多的压缩比。有损压缩广泛应用于语音、图像和视频数据的压缩。
目前现成的压缩算法很多,但不能直接用于嵌入式系统当中,这完全由嵌入式系统的特点所决定。首先,用于嵌入式系统的数据压缩方法应是无损压缩方法。其次,压缩代码和解码所需的信息代码必须足够短,否则就会失去压缩的意义。还有,嵌入式系统的数据压缩必须结合具体的数据格式的特点,才能进一步提高数据的压缩比。除此之外,目前的压缩程序的启动执行必须人为干预,不能自动执行,因为它们是为文件系统设计的,而嵌入式系统的数据压缩必须能够自动执行。

 

1 GPS数据格式
GPS OEM板由变频器、信号通道、微处理器和存储单元等组成。GPS OEM板的型号甚多,性能各异,但大多采用美国国家海洋电子协会制定的NMEA-0183通信标准格式。本系统选择的是美国SiRF公司的SiRFstarII OEM板。SiRFstarII OEM板语句的输入、输出是通过RS232串行接口完成的其通信端口的数据格式应该设置为8个数据位、1个起始位和1个停止位(校验方式选为无奇偶校验)波特率设置为4800波特。NMEA-0183通信标准的输出数据采用的是ASCII码其内容包含了纬度、经度、高度、速度、日期、时间、航向以及卫星状况等信息,语句有六种,包括GGA、GLL、GSA、GSV、RMC和 VTG。对于不同的用途,选用的语句记录也不同,例如嵌入式GPS车载系统的使用者只关心其日期和时间、经纬度、地面速度信息,因而可以只选用RMC记录语句。一条$GPRMC语句包括13个记录:语句标识头、世界时间、定位状态、纬度、纬度方位、经度、经度方位、地面速度、地面路线、日期、磁偏角、校验和和结束标记,它一共占用70个字节(其中还包括用于分隔记录所使用的11个逗号),例如:
$GPRMC,121530.998,A,4000.0162,N,11619.5476,E,0.00,240.81,160102,,*3B
由此可见,从SiRFstarII OEM板接收下来的数据流是文本字符串,根据GPS数据格式的特点,本设计中拟采用半字节法完成压缩及解压缩的任务。该方法属于无损压缩技术,其原理是去除字节中的冗余位,从而达到压缩目的。然而,这种方法只适用于纯数字文本文件的压缩,显然GPS定位数据并不是纯数字的,还必须在压缩前进行一下压缩预处理,最后再利用半字节压缩算法完成数据的压缩。

 

2 压缩预处理
仔细观察以上各段数据记录,可以发现语句之间的数据段还存在很多冗余。除此之外,这些记录中所含的信息既有英文字符又有数字,为了后续的压缩,对语句中的各个记录应做如下的预处理:
①语句标识头(ID):因为每个语句的标识头都一样,所以该记录段属于冗余信息,完全可以去除,在解压缩时再在每个语句前加上该标识头即可。
②世界时间(UTC):该信息段以时、分、秒、毫秒的格式指示出当时的世界时间。转换为北京时间还需要再加上8小时。由于车载系统的定位数据的采集是以秒为单位的,所以毫秒量级的数据对本系统根本无用,是冗余信息,将其去除后,世界时间完全可以用6个字节表示。然而,由于世界时间是按秒增1,定位数据也是每秒更新一次,所以世界时间可以在程序的一开始采集记录一下,在解压缩时根据语句的指针值再加上起始时间便可以复原,因此该记录段在第一次存储后,以后的语句中的该信息全都是冗余信息。
③定位状态(A/V):占用1个字节,不进行预处理。由于车载系统处于的地方有可能收不到卫星信号(如隧道中),致使定位信息无效,因此尽管该字段发生变化的概率较小,又与其它信息段不相关,在此仍不能做预处理。
④纬度:占用9个字节,不进行预处理。
⑤经度:占用10个字节,不进行预处理。
⑥经度指示器(E/W):占一个字节,它指示出经度是东经,还是西经。由于各个$GPRMC语句中的该段信息在中国都是东经,它是冗余信息,因此也采取程序一开始存储一次的方法。
⑦纬度指示器(N/S):占一个字节,各个$GPRMC语句中的该段信息完全一样,是冗余信息,处理方法与上相同。
⑧地面速度:占用4个字节,不进行预处理。
⑨日期:占用6个字节,以日、月、年的格式显示,各个$GPRMC语句中的该段信息在24小时内完全一样,是冗余信息,采取程序一开始存储一次的方法,以后语句中的该段信息全部废除。
⑩校验和:占用3个字节,该数据完成校验后便弃之,不保留和进行压缩。
结束符占用2个字节,只用来判断语句的有效数据范围,其它记录段与本系统的设计无关都不保留和进行压缩。
通过以上压缩预处理后,保留了四个数据记录,共占用24个字节,如图1所示。
3 改进型半字节压缩算法
文本数据的压缩所使用的都是无损压缩技术,即还原后的文件应该与源文件完全相同。文本文件压缩的方法有很多种,如HUFFMAN编码、算术编码和字典压缩方法等。它们均是无损压缩方法,都适用于文本数据的压缩。半字节压缩方法是针对文本数据的特点所设计的,主要是去除文本中的字节中的冗余位,从而达到减少数据文件所占用的存储空间的目的。在数据压缩技术中,除压缩重复字符外,还可以根据数据本身的特点进行压缩。在计算机中,任何数据都是以某种代码的方式存储的。在一些文件中,或许有一些代码具有某些相似之处,我们可以根据代码的特点进行特定的操作,压缩掉这些数据的相似部分,或者说压缩掉这些数据的特征部分,半字节压缩就是这样一种方法。半字节方法主要用于纯数字的文本文件的压缩,因为数字0~9的ASCII码的高四位都一样,是冗余的,因此每一个数字完全可以用低四位描述,即每个字符的八位编码可压缩为四位编码,压缩比理论上可趋近50%。
从图1中可以看出,经过预处理后的数据中,包含的文本字符有:"0~9"十个数字符号,"A"、"V"两个英文大写字母和一个小数点"."符号,共13个符号。"A、"V"、"."的ASCII码的高四位显然与数字字符的不一样,半字节压缩方法不能简单套用。然而,我们知道四位二进制编码可区分16种状态,用来表示13种不同的字符是足够的。
压缩数据编码表如表1所示,为了充分利用编码表中的状态,在原来13个字符的基础上又新增添了两个字符"B"和"W″,其四位编码分别为1101和1110。这两个字符是在压缩预处理过程中,用来记录那些因语句校验和出错而舍弃的语句。因为每条语句的时间信息全部在预处理阶段被舍弃,在解压缩时要恢复时间值。该值在正常情况下是根据时间的基数再加上语句的计数值(由于每秒接受到一条语句,所以语句计数值就是以秒为单位的时间增量)确定的。当发生语句校验和出错时,若处于定位有效状态,则在定位状态记录上不填写"A"字符,而填写"B"字符;若处在定位无效状态,则不填写"V"字符,而填写"W"字符。在以后解压缩时,若检测到"A"、"V"字符,时间的还原按正常的算法进行;若检测到"B"、"W"字符时,时间的还原除了按正常的算法进行以外还要加上一秒钟,这样才能确保时间能够正确的恢复,这是因为"B"、"W"字符表示上一条语句发生错误已经被丢弃,语句的压缩是非连续的,有断句现象发生。
通过此编码表进行转换后,原来经过压缩预处理后的固定24个字节长的文本数据就可以减小一半(压缩后为固定的12个字节长),压缩比为50%,若从未经过预处理的文本数据算起,则压缩比可达到80%。
表1 压缩数据编码表
预处理后所含的字符 ASCII码 四位二进制编码 备注
0 00110000 0000  
1 00110001 0001  
2 00110010 0010  
3 00110011 0011  
4 00110100 0100  
5 00110101 0101  
6 00110110 0110  
7 00110111 0111  
8 00111000 1000  
9 00111001 1001  
. 00101110 1010  
A 01000001 1011 定位有效
B 01000010 1101 定位有效,秒增1
V 01010110 1100 定位无效
W 01010111 1110 定位无效,秒增1
由图2可知,实现半字节压缩算法需要解决两个问题:首先是压缩对象的计数;其次是如何把两个数字的低位合并到一个字节中。后一个问题只要规定好压缩后的字节中奇数号字符的四位编码与偶数号字符的四位编码的存放次序即可,程序的实现非常简单,在此我们规定编号是奇数的字符放在高四位,编号为偶数的字符的编码放在低四位。假设压缩前的数据流中的前四个字符分别为"1、2、3、4",则压缩后的数据格式如图3所示。
半字节压缩中需要解决的首要问题是压缩对象的计数问题,解决此问题的方法有两种:一种是半字节计数器(Half-Byte Counter),另一种是全字节计数器(Full-Byte Counter)。不管那一种方法,它们都要占用字节,再加上压缩标识也要占用字节,所以要影响数据的压缩比。改进后的半字节压缩算法完全解决了此问题,因为GPS定位数据经过压缩预处理后的数据长度是固定的24个字节长,不是动态可变的,所以不需要解决压缩对象的计数问题。一般来说,任何一种压缩算法都需要用压缩指示字符作为压缩数据的标识,压缩标识符越短越好,因为过长会影响压缩效果。然而,由于GPS定位数据中的所有字符都进行了编码处理,不存在原样字符(不进行压缩的字符,在解压缩时原样输出),因此压缩标识完全可以省略,可进一步提高数据的压缩比。压缩预处理程序框图和改进后的半字节压缩算法框图如图4所示。
压缩文件包括解压缩所需的重要信息,由释放参照信息和依次压缩了的定长数据块组成。释放参照信息包含有解压缩所要使用的时间基数信息,它通过语句计数器以及错误代码号可以将时间还原。除此之外,释放参照信息还包括各个定长数据块在解压缩时所需的共同信息,如E/W、N/S、日期,压缩文件的格式如图5所示。
嵌入式系统的压缩是不需要人为干涉、而自动实时完成的,具体的实现方法是通过驻留内存(单任务操作系统中,如DOS)或作为一个后台任务(在多任务操作系统中,如Windows中)对数据完成实时压缩或解压缩。
GPS定位数据的压缩算法经过实际的验证,压缩比随着压缩数据的减小而略有减少,这是因为参照信息随着压缩数据的减小其所占的比例在逐渐增加的原故。但总的压缩比不低于82%,达到了预期的效果,如表2所示。该压缩方法在车载系统中使用不仅能节省存储空间,而且能减少信道的占有时间及提高数据的安全性。由于压缩程序是针对GPS数据格式编写的,因此其压缩比大但通用性不强。尽管如此,该程序略做修改可移植到其它系统中,因为各个GPS厂家所执行的规范标准都是NMEA-0183,其数据的输出格式略有差别。
参考文献
1 杨宏业,张 跃,吕 芳.一种新的GPS出租车调度系统的设计与实现.电子技术应用, 2002;28(6).
2 袁 玫,袁 文.数据压缩技术及其应用.北京:电子工业出版社,1995.12
3 黄 超, 周绮丽.智能遥测终端中压缩数据的方法.测控技术,1998(1)
4 邵方武张金标张丽萍.GPS定位信息的计算机显示.天津理工学院学报, 1996(9)

点击此处查看原文 >>

系统分类: 生活点滴   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(652)
发表于:2007-7-26 14:36:11
标签:SOCKET通信  GPRS  串行通信  AT命令  

0

基于GPRS的SOCKET通信的应用研究

基于GPRS的SOCKET通信的应用研究
 

摘要:SOCKET通信是目前常用的通信方式之一。文中以8位单片机AT89C52作为微控制器,它利用自带的异步串口与电平转换芯片MAX232和GPRS模块连接,使用AT命令对GPRS模块LT8030进行控制,从而实现SOCKET通信。详细介绍SOCKET通信中要用到的AT命令,并给出实现SOCKET通信的完整程序。

关键词:SOCKET通信 GPRS 串行通信 AT命令

引 言

  GPRS(General Packet Radio Service)是通用分组无线业务的简称,是一种以全球手机系统(GSM)为基础的数据传输技术\[1\]。GPRS网不但具有覆盖范围广、数据传输速度快、通信质量高、永远在线和按流量计费等优点,而且其本身就是一个分组型数据网,支持TCP/IP协议,无需经过PSTN(公用电话交换网)等网络的转接,可直接与Internet网互通。因此GPRS业务在无线上网、环境监测、交通监控、移动办公等行业中具有无可比拟的性价比优势。

  在网络设置中有HTTP、SOCKET等类型。SOCKET是建立在传输层协议(主要是TCP和UDP)上的一种套接字规范,它定义两台计算机间进行通信的规范(也是一种编程规范)。如果说两台计算机是利用一个通道进行通信,那么这个通道的两端就是两个套接字。套接字屏蔽了底层通信软件和具体操作系统的差异,使得任何两台安装了TCP协议软件和实现了套接字规范的计算机之间的通信成为可能。

1 系统组成

  系统的组成如图1所示。该系统利用现有的GPRS网络,单片机通过串口对GPRS模块进行收发控制,实现SOCKET通信。

  系统各部分的说明如下:

  ① 单片机采用了AT89C52,它带有一个串口;

  ② GPRS模块。本文以利事达信息技术有限公司开发的GPRS模块LT8030[2]为例。LT8030内嵌了完整的TCP/IP协议栈,包括TCP、UDP、FTP、SOCKET、Telnet、POP3、SMTP、HTTP等,为用户提供了更简单的网络接口。LT8030采用的GPRS技术,无缝覆盖、永远在线且按流量计费,紧密结合产品应用领域所遇到的实际问题,进行全面的优化和升级,使产品开发变得更容易、更快捷。它采用标准的RS232 接口,用户可以通过单片机或其他CPU的UART口,使用相应的AT命令对模块进行控制,达到使其产品可以轻松进入GPRS网络的目的。

  ③ 服务器。建立SOCKET连接必须具有公网的IP地址,故应保证服务器中心计算机连接到Internet并且取得公网IP地址。在单片机对GPRS模块控制之前,服务器端需运行SOCKET端口监听程序(此监听程序一般是现成的),并且设为监听状态,端口号也要设定,例如port:1024。

2 单片机与GPRS模块的连接

  单片机与GPRS模块一般采用串行异步通信接口,通信速度可设定,通常为9600 bps。采用RS232电缆方式进行连接时,数据传输的可靠性较好。单片机通过电平转换电路与GPRS模块连接,电路比较简单,电路原理图如图2所示。所涉及的芯片MAX232用于串行通信接口与232通信接口之间的电平转换[3]。

 点击看大图

                   图1系统组成框图

 点击看大图
      图2单片机与GPRS模拟连接的电路原理图

  MAX232的T1IN、T2IN、R1OUT、R2OUT为接TTL/CMOS电平的引脚;T1OUT、T2OUT、R1IN、R2IN为接RS232电平的引脚。TTL/CMOS电平的T1IN、T2IN引脚应接AT89C52的串行发送引脚TXD;R1OUT、R2OUT应接AT89C52的串行接收引脚RXD。与之对应,RS232电平的T1OUT、T2OUT应接GPRS模块的接收端RXD;R1IN、R2IN应接GPRS模块的发送端TXD。

  现选用其中一路发送/接收,R1OUT接AT89C52的RXD,T1IN接AT89C52的TXD,T1OUT接GPRS模块的RXD, R1IN接GPRS模块的发送端TXD。因为MAX232具有驱动能力,所以不需要外加驱动电路。

3 建立SOCKET连接的命令

  下面对SOCKET通信中要用到的一些AT命令[2]进行说明。

  3.1 基本设置

  ① GPRS ISP 码。
  AT+IISP1=*99***1# //全国通用

  ② 登录用户名。
  AT+IUSRN=WAP//GPRS网络登录名

  ③ 登录密码。
  AT+IPWD=WAP// GPRS网络登录密码

  ④ MODEM 类型。
  AT+IMTYP=2 //定义GPRS MODEM

  ⑤ 初始化命令。
  AT+IMIS=“AT+CGDCONT=1,ip,CMNET”

  ⑥ 域名服务器。
  AT+IDNS1=211.136.18.171
  //DNS服务器地址,全国通用

  ⑦ 扩展码(XRC)。
  AT+IXRC=0

  3.2 SOCKET设置
 ① 建立一个TCP通信。
  AT+ISTCP:218.66.16.173,1024<CR>
  建立SOCKET连接,218.66.16.173为应用服务中心计算机端IP地址(实际地址由实际情况决定),1024 为端口号(端口号由中心SOCKET端口监听程序设置决定)。 如果连接成功,LT8030返回I/xxx。xxx为LT8030中本次SOCKET连接的句柄号。中心监听程序会显示连接的终端IP地址。如果连接失败,LT8030返回I/ERROR(xxx)。xxx为错误代码。

  ② 发送数据。
  AT+ISSND%:xxx,<string Length>:<string>
  发送数据,xxx为句柄,<string Length>为要发送的字符长度,<string>为要发送的数据。发送成功后,在中心端可看到终端发送的数据。最多一次能够发送5K以下的数据。

  ③ 查询SOCKET状态。
  AT+ISST:xxx<CR>
  查询SOCKET状态,xxx为句柄。 LT8030返回I/<SOCKETstat>。如果<SOCKETstat>= 000,表示该端口连接正常;如果<SOCKETstat>≥1,LT8030通过该端口从中心接收存在Buffer 里的字节数;如果<SOCKETstat><0,则SOCKET错误。

  ④ 接收数据。
  AT+ISRCV:xxx<CR>
  xxx为句柄。该指令会读取LT8030通过该句柄从中心接收到的,存在Buffer 里的数据;Buffer最大可存储30K的数据。

  ⑤ 关闭SOCKET通道。
  AT+ISCLS:xxx
  关闭SOCKET通道,xxx为句柄。
4 程序的设计  

  根据单片机与GPRS模块通信协议的约定,单片机串行口设为方式1,波特率为9 600 bps,8位UART,1位起始位,1位停止位,无奇偶校验。上电后,首先向GPRS模块发送基本设置命令,即ISP码、用户名及用户密码帧等,其中ISP码必须为“*99***1#”,用户名和用户密码可以任意设置,但不能为空。在使用LT8030 GPRS 上网功能之前,必须正确设置这些参数。参数一旦设置后,即永久保存,以后无需重新再设( 以上设定为LT8030C出厂时的默认参数)。然后向GPRS模块发送SOCKET设置帧,如成功,则点和点通信环境已建立,接着就调用发送数据帧。

  开机上电后,程序在主函数中运行,单片机进行初始化。初始化包括设置串口工作方式、波特率,并初始化变量参数和标志位。

结语

  随着计算机和通信技术的进步,当今社会的生产正朝着高效、准确和稳定的方向发展,这对数据传输的实时性、可靠性、信息量提出了更高的要求,为此介绍利用GPRS模块实现SOCKET通信的系统。本文采用内嵌TCP/IP协议的GPRS模块LT8030,在8位微控制器AT89C52上实现了对LT8030的控制,并实现了基于GPRS的SOCKET通信功能,具有外围器件少、电路简单、系统成本低等优点。

                参考文献

1 J R (Bud)Bates. 通用分组无线业务(GPRS)技术与应用. 朱洪波,等译. 北京:人民邮电出版社,2004
2 利事达信息技术有限公司.LT8030介绍
3 胡伟,季晓衡.单片机C程序设计及应用实例. 北京:人民邮电出版社,2003
4 张毅刚,彭喜元,等.MCS51单片机应用设计.哈尔滨:哈尔滨工业大学出版社,2002

余琴:研究生,主要从事智能仪器设计与嵌入式系统方向的研究。
赵振华:研究生导师,副教授,主要从事智能仪器设计与嵌入式系统方向的研究与教学。

作者:武汉工程大学 余琴 赵振华

点击此处查看原文 >>

系统分类: 资源共享   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(497)
发表于:2007-7-25 9:23:23
标签:无标签

1

用定时器 T0 或 T1 模拟串行口程序

doc

用定时器 T0 T1 模拟串行口程序,效果不错。

点击此处查看原文 >>

系统分类: 生活点滴   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(494)
发表于:2007-7-25 9:10:32
标签:IO通信  

2

双CPU,普通I/O,3线通信

双CPU,普通I/O,3线通信


3线双向零等待IO通讯机制


许多设备需要通过IO通讯交互数据,怎样才做到速度最快,通讯可靠,所用资源又少呢?
下面介绍一个我编写的通讯协议:
它没有1线,2线那样节省IO资源,但是它的通讯速度绝对最快,无需延时,且不用中断,还可以
对等传输.
实际情况下C51编写,实现了50us传输一个字节,折合160Kbps左右,晶振22M。

特点如下:
使用3根普通IO通讯
不使用中断
双方都可以主动发起数据通讯,也都可以被动接收数据,即可以对等传输.
有发送和接收的检查等待机制,发送方知道对方什么时候收了数据,接收方知道发送方什么时
候发了数据.
无需进行数据延时,最大可能地加快了通讯速度.
CPU闲的时候通讯速率可以最快.忙的时候又可以无限等待.保证绝对同步,不会出错.
双方CPU工作速度可以任意,即使是51和P4通讯,也能保证正确无误.

    ask w1    w2    w3    w4    w5    w6    w7    w8            
MCLK ┐┌──┐    ┌──┐    ┌──┐    ┌──┐    ┌───            
     └┘    └──┘    └──┘    └──┘    └──┘ 
                          
SDT ___┌─┐┌─┐┌─┐┌─┐┌─┐┌─┐┌─┐┌─┐________
       └─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘  

SCLK  ┐  ┌──┐    ┌──┐    ┌──┐    ┌──┐    ┌─                 
      └─┘    └──┘    └──┘    └──┘    └──┘
    res  r1    r2    r3    r4    r5    r6    r7    r8                           

1.主机发起通讯申请到从机
主机检测MCLK是否为0,为0的话是对方在申请通讯,退出函数.
主机检测到MCLK=1,表示通讯空闲.
主机将MCLK=0,表示申请通讯. 之后检测SCLK是否为0(是否响应通讯)

2.从机响应通讯,从机在闲时检测MCLK是否为0,发现为0则主机向它发起了通讯申请.
从机将SCLK=0,表示接受申请,之后检测MCLK是否变为1,如果是1则主机已经发出了第一个bit
的数据.  

3.主机发现SCLK=0,知道从机已经开始准备接受数据.
4.主机发送第一个bit到SDA.
5.主机将MCLK=1,表示已经发送第一个bit到SDA.

6.从机发现MCLK=1,知道主机已经发出第一个数据
7.从机收第一个bit的数据.
8.从机将SCLK=1,表示已经收了第一个bit.之后等待MCLK是否变0,如果变0,则主机已经发出
了第二个bit


9.主机发现SCLK=1,知道从机已经开始准备接受第二个数据.
10.主机发送第二个bit到SDA.
11.主机将MCLK=0,表示已经发送第二个bit到SDA.

12.从机发现MCLK=0,知道主机已经发出第二个数据
13.从机收第二个bit的数据.
14.从机将SCLK=0,表示已经收了第二个bit.之后等待MCLK是否变1,如果变1,则主机已经发出
了第三个bit

15.再重复3-14,3遍,传完8bit数据.

16.主机发现SCLK=0,知道从机已经收完8位数据
17.主机将MCLK=1,准备下一轮通讯

18.从机发现MCLK=1,知道主机已经收起MCLK
19.从机将SCLK=1,准备下一轮通讯

附源代码:
sbit MCLK="P3"^5;
sbit SCLK="P3"^6;
sbit SDA="P3"^7;
uchar bdata DATA;
sbit BIT0=DATA^0;
sbit BIT7=DATA^7;
// 发送一个数据
putbytespi(uchar ch)
{
    uchar i;
    uint c;
    
    if(!MCLK)return; //    
    MCLK="0";    //申请通讯
    DATA="ch";

    for(i=4;i!=0;i--)
    {
        while(SCLK); //检测从机响应
    
        SDA="BIT0";   //放一个bit到SDA
        MCLK="1";        
        DATA="DATA">>1; //准备下一个bit

        while(!SCLK); //检测从机响应
    
        SDA="BIT0";   //放一个bit到SDA
        MCLK="0";        
        DATA="DATA">>1; //准备下一个bit
    }
    while(SCLK); //检测从机收完
    MCLK="1";
    while(!SCLK);//等待从机准备好
    SDA="1";
}

//接收一个数据
//调用之前最好检测MCLK是否为0(对方是否申请数据通讯)再进入,否则里面是死等此信
号!
uchar getbytespi()
{
    uchar i;

    while(MCLK);
    SCLK="0";    //接受通讯请求

    for(i=4;i!=0;i--)
    {
        DATA="DATA">>1; //准备收下一个bit
        while(!MCLK); //检测主机放数据
        BIT7=SDA;//收一个bit
        SCLK="1";

        DATA="DATA">>1; //准备收下一个bit
        while(MCLK); //检测主机放数据
        BIT7=SDA;  //收一个bit
        SCLK="0";    
    }
    
    while(!MCLK); //检测主机发完
    SCLK="1";
    return(DATA);    
}

点击此处查看原文 >>

系统分类: 生活点滴   |    用户分类:    |    来源: 无分类

评论(0) | 阅读(397)
2下一页总共 , 当前 /