摘 要: 针对数据帧格式固定、校验方式单一以及传输速率不便于更改等问题,提出了一种通过 STC89C516RD+单片机实现的软件编解码方法。该方法通过定时器的延时来实现对数字信号的编码;通过外部中断与定时器相结合的方式进行解码,即利用接收到的脉冲信号的上升沿启动定时器工作,下降沿停止定时器工作并触发外部中断,然后读取计数寄存器的值并识别数据。实验证明,该方法的数据帧格式及校验方式灵活多变,而且可以降低无线传输系统的成本,适用于无线控制、数据采集、故障报警等多种无线数据通信场合。
关键词: 编码;解码;定时器;外部中断
随着微电子、计算机信息技术的迅速发展,由单片机和无线传输模块组成的无线数据通信系统在石油、电力、水文、冶金、安防等行业的无线控制、数据采集、故障报警等诸多领域中得到越来越广泛的应用。而数据的编解码对于无线传输可靠性的影响举足轻重。目前编解码方式主要有硬件编解码和软件编解码两种。本文在对已有硬件及软件编解码技术研究的基础上,设计并通过STC89C516RD+单片机实现了一种以软件方式对传输数据编解码的方法。
1 现有的编解码技术
1.1 硬件编解码技术
目前有多种用于编码和解码的专用芯片,PT2262/PT2272是比较常用的一种。在通常的使用中,一般采用8位地址码和4位数据码,这时编码芯片PT2262和解码芯片PT2272的第1~8脚为地址设定脚。有三种状态可供选择:悬空、接正电源和接地,38为6 561,所以地址编码不重复度为6 561组,只有发射端PT2262和接收端PT2272的地址编码完全相同时,才能配对使用。当编码启动端TE接低电平时,PT2262就将从数据输入端D0~D3输入的数据经过编码后从DOUT引脚串行输出[1],数据帧的高8位为地址,低4位为数据,发送时以先高位、后低位的顺序逐次发送。每一帧发送4次,每帧数据中间由同步码隔开。PT2272只有在连续2次检测到相同的地址码和数据码时才会把数据码中的“1”驱动相应的数据输出端为高电平和驱动VT引脚同步为高电平[2],将VT引脚反向后接入单片机的外部中断输入引脚,通过触发中断来通知单片机接收到数据了。
PT2262/PT2272芯片功耗低、外部元器件少、工作电压范围宽。但这两个芯片在应用中必须对地址统一编码,配对使用,而且需要通过改变硬件电路才能重新设置芯片地址;该编码芯片的帧格式是固定的,不能随意改动,而且编码的脉冲宽度需要调节外接振荡电阻大小才能改变。这些都给用户的使用带来了极大的不便。
1.2 软件编解码技术
在利用单片机和无线传输模块进行无线数据传输的过程中,使用软件编解码时通常会采用定时采样的方式。总体设计思想如下:发送端通过定时器延时产生不同宽度的脉冲或脉冲组合来实现对数据“0”和“1”的编码。接收端对接收到的脉冲信号进行定时采样,然后通过计算识别出对应的数据信号。通过定时采样的方式进行解码时,对采样频率具有比较严格的要求。根据奈奎斯特理论,只有采样频率高于发射信号最高频率的2倍时,才能把数字信号准确还原[3]。但是中断的响应与返回以及数据的判断都会造成时间延迟,因此,发射信号的频率不能太高,否则容易导致数据丢失。同时定时采样需要多次调用中断服务程序,增加了额外的时间开销。这些都会降低无线数据传输的速率。
2 改进的编解码技术
2.1 软件编码原理及程序流程
编码就是用不同形式的码型来表示二进制的“1”和“0”。本文采用的编码方式为脉冲—间隙编码,即在下一脉冲前的暂停持续时间t表示二进制符号“1”,而下一脉冲前的暂停持续时间2t表示二进制符号“0”[4],脉冲—间隙编码如图1所示。发送端的信号分为同步信号、数据信号以及校验和信号,无线发射电路如图2所示。经过编码后的信号由单片机的P1.7引脚输出到无线发射模块,然后无线发射模块将基带信号经高频载波电路调制后,通过天线向空间辐射。
在发送端对数据进行编码时,由于对发送的数据位、位数的判断以及校验和的生成所产生的延迟时间不超过70T,其中T为机器周期,因此,定义100T的高电平脉冲代表“1”,而200T的高电平脉冲代表“0”。在接收端进行解码时,由INT1引脚上的下降沿触发中断并停止定时器计数,进而识别数据信号,此过程中断服务程序的延迟时间不超过50T。因此,设置数据位之间的低电平脉冲宽度为70T。为了不与数据信号混淆,将同步位定义为300T的高电平脉冲。本实验采用的石英晶体的晶振频率为12 MHz,因此一个机器周期为1 μs,故一个字节的传输速率最快为5 882 b/s,最慢为3 703 b/s。
软件编码程序流程图如图3所示,采用定时器0工作在方式1,即16位定时器工作方式,根据不同的输出脉冲宽度需求向计数寄存器TH0和TL0中装入不同的初始值。标志位flags_0用来区分高电平脉冲和低电平脉冲,当标志位flags_0为0时输出两个数据位之间的低电平脉冲,不为0时输出高电平脉冲。标志位flags_1用来区分数据位和同步位,当flags_1为0时输出数据位高电平脉冲,为1时输出同步位高电平脉冲。在发送的过程中,每发送一个字节,就将该字节累加到校验和中,当所有的数据发送完后就发送校验和。
2.2 软件解码原理及程序流程
解码是用特定方法把数码还原成它所代表的内容,或将电脉冲信号转换成它所代表的信息、数据等过程。本文采用定时器与外部中断相结合的方法对接收到的脉冲信号进行解码,并利用接收到的校验和进行校验。
将单片机的模式控制寄存器TMOD的门控位GATE置1,当TR1=1时,外部中断INT1直接控制定时器1的启动、停止,即INT1由0变为1电平时,启动计数;当INT1由1变为0电平时,停止计数。这种情况常用来测量在INT1引脚上出现的正脉冲的宽度[5]。无线接收电路如图4所示,无线接收模块将接收到的信号进行解调、放大和整形,恢复出基带信号,由引脚2输出到单片机的INT1引脚上。设置外部中断1为下降沿触发方式,定时器/计数器1为16位定时器工作方式。当INT1引脚上出现由高到低的负跳变时触发中断,定时器1停止计数[6],读取计数寄存器TL1和TH1中的值来判断脉冲宽度,从而解码接收到的数据信号。
由于在发送过程中重装计数初值、接收数据以及中断的响应都需要时间,所以接收到的实际脉冲宽度大于发送的脉冲宽度。因此,如果接收到的高电平脉冲宽度大于300T则表示接收到同步位;若大于200T则表示接收到数据位“0”;否则表示接收到数据位“1”。软件解码流程图如图5所示,在接收到同步位后,开始接收数据,直到再次接收到同步位的时候暂停接收。利用接收到的数据以及校验和进行校验,如果接收到的数据正确,则停止接收;如果不正确,则将之前接收到的数据全部丢弃,再重新开始接收。
实验证明,通过该方法进行软件编码和解码时,可以根据不同的需要使用软件编程来设置地址,接收端与发送端可以进行多对多的无线数据通信,而不需要配对使用;改变定时器的计数寄存器初值就可以改变编码的脉冲宽度,从而改变传输速率;解码准确快捷,占用CPU资源相对较少,便于操作;校验方式可选,数据帧格式灵活多变。
本实验中采用的是晶振频率为12 MHz的石英晶体,以及具有CISC结构的8位单片机,它的一个机器周期要占用12个振荡周期,执行一条指令最少要一个机器周期,处理速度较慢,在一定程度上影响了无线传输速率。可以通过提高晶振频率或者选择速度较快的单片机作为控制芯片的方式来提高无线数据传输速率。如选择具有流水线结构的C8051F系列单片机,或者是具有预取指令功能的AVR系列单片机,它们可以在一个时钟周期内完成一条指令。也可以采用具有DW8051_core核的单片机,它采用4个时钟周期为1个指令周期的模式,在时钟周期相同的情况下,处理能力是标准8051的3倍。采用这些高速度的单片机可以减少程序执行所产生的延迟时间,从而缩短数据位编码脉冲宽度,提高无线数据传输速率。
参考文献
[1] 黎国锋,冯永振,卢广文.近距离无线加密传输韦根信号的实现[J].无线通信技术,2009(1):31-36.
[2] 赵秋.利用编解码芯片的无线收发电路[J].信息化研究,2009,35(9):35-38.
[3] 邵平凡,陈华斌.基于Atmega8无线信号软件编解码的实现方法及性能分析[J].福建电脑,2009(8):115-116.
[4] 康东,石喜勤,李勇鹏,等.射频识别(RFID)核心技术与典型应用开发案例[M].北京:人民邮电出版社,2008.
[5] 梅丽凤,王艳秋,汪毓铎,等.单片机原理及接口技术[M].北京:清华大学出版社,2004.
[6] 马忠梅,籍顺心,张凯,等.单片机的C语言应用程序设计(第4版)[M].北京:北京航空航天大学出版社,2007.