芯片资讯
- 发布日期:2024-11-23 07:42 点击次数:186
随着自动化水平的不时进步,对现场数据远程采集与传输的请求也日益进步,在电话通讯网络相当提高的今天,最便当最灵敏的办法就是采用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 收到指令后,以数字方式返回结果码;
AT&F:参数恢复为出厂值;
AT&D0:疏忽DTR信号;
AT&S0:将DSR信号设定为ON;
ATD:发出拨号指令;
AT&W0:将MODEM 目前的参数状态存储在参数表0 中;
AT&Y0:当MODEM 初始上电时,调用存储的参数表0;
ATZ0: 复位MODEM 并启用存储的第0组参数表;
AT&Z=X:将电话号码X存储在MODEM 的内部存储器中;
ATDS:拨出MODEM 预存储的电话号码。
那么,单片机如何应用这些指令来操作MODEM呢?下面以发送指令ATA为例来加以阐明,程序采用C51编写,该程序只给出了相关的局部,
#include 《 P》
#include 《 P》
#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_c&0x05)!=0x05);
U8251_D=*send_addr;
send_addr++;
}while(--send_sum);
}
为了单片机对MODEM 的控制和操作,对本系统设计中的MODEM 做了如下初始化:
AT&FE0V0&D0&S0&Y0&W0
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供应。发送数据可依据系统请求在主程序中完成,JJW(捷捷微电)功率半导体IC汽车芯片 接纳数据缓冲区恳求输出RXRDY经74LS02反向后接78E52B的中缀输入INT0,接纳数据采用中缀方式控制,系统设计时疏忽了DSR信号, 因此在图2 中将其直接接地;
RS232 接口电平转换电路采用一片具有五对输入和输出的MSX238,它自带电荷泵,采用单5伏电源,只用一片便可提供本系统一切RS232电平的驱动与转换。
4 现场数据采集器的功用及原理
现场数据采集器有两种工作方式, 即主叫方式和被叫应对方式。主叫方式就是现场数据采集器主动呼叫监控中心;被叫应对方式是在现场数据采集器收到监控中心的呼叫振铃后响应应对指令。另外,现场数据采集用具有远程设置主叫呼叫号码的功用,其软件编制流程图如图3 所示。
图3 现场数据采集器的程序流程图
4.1 通讯波特率
8251 的通讯波特率取决于RXCLK和TXCLK的时钟输入,在异步方式中,RXCLK,TXCLK能够是波特率,也能够是波特率的16 或64倍。这由8251控制字中的波特率因子来决议,在本系统设计中,设波特率因子为异步X16,即RXCLK,TXCLK是传输波特率的16倍。从图2能够看出,RXCLK,TXCLK由8155 的TMROUT给出, 而8155 的TMRIN为系统时钟fosc的1/6,因而选择波特率的关键就是肯定8155定时器的时间常数。假如将8155 的定时器设为连续方波输出,那么8155 定时器的时间常数N和定时器输入频率fTMRIN,输出频率fTMROUT的关系为:fTMROUT=fTMRIN/N,设8251的分频系数为16,则传输波特率可有下式计算:
波特率=fTMROUT/16=fTMRIN/16N=fosc/(6X16N)
本系统选用频率为11.0592MHz 的晶振,fosc为1.0592MHz, 若8251 采用2400Hz的波特率来传输数据,则8155的定时器常数N为:
N=11.0592X106/(2400X16X6)=48=30H
依照以上剖析,则8155,8251 初始化编程如下:
void initialize rs(void)
{
U8155_IO=0xc0; /*8155命令字初始化*/
U8155_TO=0x30;/*送8155定时器常数低字节*/
U8155_TH=0x40; /*送8155定时器常数高字节*/
U8251_C=0x4e; /* 方式控制字初始化*/
U8251_C=0x37;
}
4.2 远程设置主叫呼叫号码
在本系统中,当关键数据发作越限变化时,现场数据采集器可以自动呼叫监控中心,而被呼叫的电话号码却不可以存储在程序的ROM中, 缘由有两条:第一:监控中心的电话号码可能会变卦;第二:不同的用户被呼叫的电话号码不一样; 而在现场数据采集器上设计一片EEPROM 也不是最好的计划;处理这一问题的最佳办法是将此电话号码存储在MODEM 中, 那么如何完成呢?可用前面提到的AT&Z=X(X为电话号码) 命令停止远程设置,当监控中心需求修正这个电话号码时, 就呼叫现场数据采集器,并将此电话号码传输给数据采集器,然后由数据采集器自动用AT&Z=X(X为电话号码)命令将此号码存储在MODEM 中。
4.3 主叫方式
当现场数据采集器采集到的关键数据发作越限变化时,现场数据采集器便应用AT指令ATDS主动拨打存储在MODEM 中的电话号码来呼叫监控中心,并将关键数据打包传送给监控中心,在监控中心收到信息包后,系统便可停止存储和剖析,以供值班人员判别并做出处置。
4.4 被叫方式
当监控中心需求取得现场数据时, 能够主动拨号呼叫现场数据采集器, 在图2中,W78E52 的P1.1在检测到预定次数的振铃信号时发出MODEM应对指令ATA,并在延时等候MODEM 连通以及双方握手胜利后, 由监控中心向现场数据采集器发出恳求发送数据指令。现场数据采集器收到指令后将实时变化的动态数据传送给监控中心, 以使监控中心随时中缀对数据接纳, 并向现场数据采集器发出挂机指令。现场数据采集器在收到挂机指令后中止发送数据并挂机。
4.5 存在问题及处理办法
本系统刚开端设计时,8251 的复位输入端和CPU的复位输入端是衔接在一同,这样设计曾呈现过8251不能牢靠复位的问题。 后改为靠W78E52的P1.0 给8251发复位脉冲,图2 所示,这样,就可依据软件抗干扰的需求随时复位8251,用C51编写的复位程序如下:
void reset_8251(void)
{
P1^0=1;
ACC=0;
while(--ACC);
P1^0=0;
}
5 结论
理论证明,该系统和MODEM 接口具有电路简单,本钱低,牢靠性高的特性。在实践应用中获得了良好效果. 关注电子行业精彩资讯,关注亿配芯城官方微信,精华内容抢鲜读。 关注方法:添加好友→搜索“亿配芯YiBEiiC”→关注 或微信“扫一扫”二维码 亿配芯城(WWW.YiBEiiC.COM)隶属于深圳市新嘉盛工贸有限公司,成立于2013年并上线服务,商城平台主要特点“线上快捷交易配单+线下实体供应交货”两全其美的垂直发展理念,是国内电子元器件专业的电子商务平台+实体店企业。未来发展及模式主要以(一站式配单,平台寄售/处理闲置库存达到资源共享双赢,电子工程师交流社区,硬件开发与支持等互动服务平台)在这个高效而发展迅猛的科技互联网时代为大家提供精准的大数据资源平台。
- MCS51单片机程序设计时堆栈的计算方法解析2024-11-17
- 单片机设计方案的情况下,挑选适合的晶振也是很重要的2024-10-27
- 单片机中的三极管有什么用吗?2024-09-14
- 基于MAX6603信号调理器的PC温度测量系统的步骤2024-08-05