单片机和MODEM接口及远程数据传输
随着自动化程度的不断提高,对现场数据远程采集与传输的要求也日益提高,在电话通讯网络相当普及的今天,最方便最灵活的方法就是采用MODEM(调制解调器)并借助于现有的模拟公用电话交换网进行数据传输,经过几年的研究,笔者开发了一种在单片机控制下通过公用电话交换机网络做载体的数据传输系统,这种数据传输系统不受时间与地域的限制,并可随时实时追踪现场资料的变化情况,从而为远程故障的诊断和排除提供了便利。
由于目前国内有关单片机和MODEM的接口资料很少,所以,本文主要就单片机和MODEM接口及如何利用AT命令来控制MODEM 做些介绍。
1 系统组成
图1 所示为该远程数据采集系统的系统组成图,整个系统主要由现场数据采集器和监控中心两部分组成,现场数据采集器负责将所采集到的数据进行预处理后打包, 并通过现场调制解调器MODEM、公用电话网和监控中心的MODEM 将数据发送到监控中心。然后监控中心将接收到的数据进行处理、显示、存储和分析,并根据需要向现场发送控制指令,由于监控中心采用计算机与MODEM 直接相连的方式, 因此硬件接口比较简单, 而软件编写不是本文讨论的重点,不再赘述。系统有两种工作方式:即监控中心呼叫现场请求发送数据和现场呼叫监控中心主动发送数据。
图1 系统组成图
2 MODEM 命令
由于MODEM 是将数据通过公用电话网进行远程发送和传输的桥梁,这里先将MODEM 的功能及用法做一介绍"MODEM 是“调制解调器”的英文缩写,所谓调制,就是将“0”和“1”的数字信号变成不同的频率信号,调制到载波频率上,并利用电话线进行模拟信号的传送, 解调是调制的反过程, 即将载波频率上的频率信号解调成与其对应的数字信号,传送至终端控制器。
目前,我们在市场上所见到的MODEM 都用贺氏兼容的指令集来管理和设定MODEM 的各项操作和通讯功能,而一般这些指令皆以AT为前置码,所以称这些指令为“AT指令”。下面介绍几个常见的MODEM 指令,这些指令都以回车(RETURN)结尾。
ATA:手动应答指令,强迫MODEM 摘机并检测载波;
ATE0: 指令不回应,即向MODEM 发送的指令不在终端回显;
ATV0: MODEM 以数字形式回应信息,即MODEM 收到指令后,以数字形式返回结果码;
ATF:参数恢复为出厂值;
ATD0:忽略DTR信号;
ATS0:将DSR信号设定为ON;
ATD:发出拨号指令;
ATW0:将MODEM 目前的参数状态存储在参数表0 中;
ATY0:当MODEM 初始上电时,调用存储的参数表0;
ATZ0: 复位MODEM 并启用存储的第0组参数表;
ATZ=X:将电话号码X存储在MODEM 的内部存储器中;
ATDS:拨出MODEM 预存储的电话号码.
那么,单片机如何利用这些指令来操作MODEM呢?下面以发送指令ATA为例来加以说明,程序采用C51编写,该程序只给出了相关的部分,
#include reg52.h>
#include absacc.h>
#define U8251_C XBYTE[0xfd00]
/* 定义8251 控制/状态字地址*/
#define U8251_D XBYTE[0xfc00]
/*定义8251 数据缓冲区地址*/
unsigned char code ATA[4]={'A','T','A',0x0d};
/*0x0d为回车(return)控制符*/
void send-code (unsigned char code *send_addr,
unsigned char send_sum);
/*发送函数声明,形式参数为发送
首地址和发送字符个数*/
void main()
{
……
send_code(ATA,4); /*发送ATA应答命令*/
……
}
void send_code(unsigned char code *send_addr,
unsigned char send_sum)
{
do{
while((U8251_c0x05)!=0x05);
U8251_D=*send_addr;
send_addr++;
}while(--send_sum);
}
为了单片机对MODEM 的控制和操作,对本系统设计中的MODEM 做了如下初始化:
ATFE0V0D0S0Y0W0
3 接口电路
图2 为该现场数据采集系统中单片机和MODEM的接口电路图, 单片机选用Winbord(华帮)公司生产的高性能低功耗单片机W78E52B,它采用80C31内核,在指令上与MCS-51完全兼容,内含8k的电可擦除MTP ROM(Multiple-Time Programmable ROM).其内部串口能和其它有串口的通讯设备一起进行数据采集(这部分在图2中没画出);
图2 单片机和MODEM 的接口电路
考虑到所采集的数据较多,故扩展了一片8155 作为外部数据存储器,并兼做并行数据采集接口,其内部14 位定时器作为分频器使用;另扩展的一片8251 用来和MODEM 接口,8251的内部工作时序,发送器时钟和接收器时钟需要外部输入,在设计中,单片机提供的ALE信号作为其外部输入,因而无需单独设计分频器,由于在单片机访问外部存贮器时, ALE要丢失一个周期,因而采用图2所示的方法,可充分利用系统资源,根据接收时钟输入RXCLK和发送时钟输入TXCLK的不同,8251 的发送波特率和接收波特率可以不同,在本系统中,发送波特率和接收波特率相同,都由8155定时器分频输出TMROUT供给.发送数据可根据系统要求在主程序中完成,接收数据缓冲区请求输出RXRDY经74LS02反向后接78E52B的中断输入INT0,接收数据采用中断方式控制,系统设计时忽略了DSR信号, 因而在图2 中将其直接接地;
RS232 接口电平转换电路采用一片具有五对输入和输出的MSX238,它自带电荷泵,采用单5伏电源,只用一片便可提供本系统所有RS232电平的驱动与转换.
- FPGA的DSP性能揭秘(06-16)
- 基于单片机通用引脚的软件UART设计(10-16)
- 分时操作系统思想在单片机中的具体应用 (10-30)
- 基于AT89C51+DSP的双CPU伺服运动控制器的研究(05-26)
- 关于RTX51 TINY的分析与探讨(05-30)
- 基于MC9S12DGl28单片机的智能寻迹车设计(04-03)