位置:51电子网 » 技术资料 » 单 片 机

纯软件实现单片机远程通信

发布时间:2007/9/8 0:00:00 访问次数:480

GMS972051是韩国LG公司生产的MW内部带2K E2PROM的与MCS-51兼容的单片机。GMS97C2051省去了MCS-51的P0和P3口,但是多了一个内部硬件比较器。由于单片机的通信信号为TTL电平,如果不采取其它的措施,其在通信速率为9600bps时通信距离不超过5米。一般为了延长单片机的通信距离,采用RS-232/RS-485转换器、RS-232/RS-422转换器或光隔远程收发器。本文介绍的方法可将GMS97C2051单片机之间通信距离延长到1200米以上,而且不需要添加任何硬件措施,完全用软件来实现。

要用纯软件方法实现GMS97C2051单片机之间的远程通信,首先必须将单片机的TTL电平的软件方法转换为差分电平,其次要用普通I/O口线来构成软件串行口,并且在软件上进行正确的配合。

TTL电平转换成差分电平的纯软件方法

GMS97C2051单片机的信号均为TTL电平。TTL电平信号传输距离非常有限,一般在9600bps传输率时传输距离不超过5米。而差分电平信号则是取决于两种信号线之间的电平差值,如果某条信号线的电平高于另一条,则信号为1,否则为0。由于差分电平信号可以避免长距离传输导线上的电荷积累,并且具有更宽的电平范围,所以传输距离远得多。RS485差分电平信号在9600bps传输率时传输距离可达1200米。

为了用纯软件实现差分电平传输就不能使用GMS97C2051本身的硬件串行口,而是用普通I/O线来实现串行通信。差分电平要用两条I/O口线来实现,比如P1.2和P1.3两条线(见图1)。当传输信号为1时,P1.2为+5V,而P1.3为0V。当传输信号为0时,P1.2为0V为0V,而P1.3为+5V。注意P1.2和P1.3不得同时置+5V或同时置0V。

GMS97C2051单片机的P1.0和P1.1可以分别作为片内精密模拟电压比较器的正输入端(AIN0)和负输入端(AINI),所以正好可以用于接收差分电平信号。内部电平比较器的输出已经在芯片内部连到P3.6口,所以可以通过读取P3.6口的值来得到差分电平信号。

软件串行口的实现方法

由普通I/O口线来实现串行通信,习惯上称为软件串行口。采用差分电平通信的软件串行口的硬件接线图如图2.A、B两机均为GMS97C2051单片机。P1.2和P1.3用于发送,P1.0和P1.1口用于接收,P1.0同时接本机中INI0。软件串行口一般全用标准的10位异步通信格式:1位起始位(信号0),8位数据位,1位停止位(信号1)。接收时均是低位数据在前,高位数据在后。

软件串行口接收和发关的工作原理和过程如下:单片机复位后,执行初始化程序时,定义P1口为位控方式,其中P1.0和P1.1定义为输入,P1.2和P1.3定义为输出。P1.2初始化为"1",P1.3初始化为"0",这样发送信号处于停止位(差分电平"1")。定义INT0为负沿触发。允许中断且定义成高优先级,然后开中断,两机进入随时可开始串行通信的等待状态。A、B不通信时,两机的收发均为"1",一旦某机(假设为A)需要与对方通信,A机以约定的波特率(假定为9600bps),通过P1.2和P1.3发送。发关和接收一个字节的过程如下:

A机发送端首先发送起始位("0"电平),B机INT0引脚产生下跳沿后,产生中断申请。B机CPU响应此中断后,执行INT0中断服务子程序。在中断服务子程序开始,用位输入指令读入P3.6状态,如果是"1"电平,则表明此次中断是受干扰所致,因而取消此次接收过程,中断返回;如果P3.6状态读入电产是"0",则表明本次中断确系A机发送超始位所引起,经精确延时,在A机发送各数据位中间处进行采样,获得各数据位的状态,最后生成一个字节,送有关单元之后中断返回。虽然送往INT0的信号为TTL电平,但是由于它的传输速率非常之低,加上软件抗干扰措施,所以仍然可以有效地传输1200米。

软件串行中远程通信的关键是如何以较高的波特率可靠地实现数据的发送和接收。下面介绍一组以9600bps波特率设计,用MCS-51汇编语言编写的具有很强抗干扰能力和很高可靠性的收发一个字节的子等等程序。

软件串行通信的编程

串行通信要实现成功接收必须解决以下关键技术:(1)要准确、快速检测出对方发

GMS972051是韩国LG公司生产的MW内部带2K E2PROM的与MCS-51兼容的单片机。GMS97C2051省去了MCS-51的P0和P3口,但是多了一个内部硬件比较器。由于单片机的通信信号为TTL电平,如果不采取其它的措施,其在通信速率为9600bps时通信距离不超过5米。一般为了延长单片机的通信距离,采用RS-232/RS-485转换器、RS-232/RS-422转换器或光隔远程收发器。本文介绍的方法可将GMS97C2051单片机之间通信距离延长到1200米以上,而且不需要添加任何硬件措施,完全用软件来实现。

要用纯软件方法实现GMS97C2051单片机之间的远程通信,首先必须将单片机的TTL电平的软件方法转换为差分电平,其次要用普通I/O口线来构成软件串行口,并且在软件上进行正确的配合。

TTL电平转换成差分电平的纯软件方法

GMS97C2051单片机的信号均为TTL电平。TTL电平信号传输距离非常有限,一般在9600bps传输率时传输距离不超过5米。而差分电平信号则是取决于两种信号线之间的电平差值,如果某条信号线的电平高于另一条,则信号为1,否则为0。由于差分电平信号可以避免长距离传输导线上的电荷积累,并且具有更宽的电平范围,所以传输距离远得多。RS485差分电平信号在9600bps传输率时传输距离可达1200米。

为了用纯软件实现差分电平传输就不能使用GMS97C2051本身的硬件串行口,而是用普通I/O线来实现串行通信。差分电平要用两条I/O口线来实现,比如P1.2和P1.3两条线(见图1)。当传输信号为1时,P1.2为+5V,而P1.3为0V。当传输信号为0时,P1.2为0V为0V,而P1.3为+5V。注意P1.2和P1.3不得同时置+5V或同时置0V。

GMS97C2051单片机的P1.0和P1.1可以分别作为片内精密模拟电压比较器的正输入端(AIN0)和负输入端(AINI),所以正好可以用于接收差分电平信号。内部电平比较器的输出已经在芯片内部连到P3.6口,所以可以通过读取P3.6口的值来得到差分电平信号。

软件串行口的实现方法

由普通I/O口线来实现串行通信,习惯上称为软件串行口。采用差分电平通信的软件串行口的硬件接线图如图2.A、B两机均为GMS97C2051单片机。P1.2和P1.3用于发送,P1.0和P1.1口用于接收,P1.0同时接本机中INI0。软件串行口一般全用标准的10位异步通信格式:1位起始位(信号0),8位数据位,1位停止位(信号1)。接收时均是低位数据在前,高位数据在后。

软件串行口接收和发关的工作原理和过程如下:单片机复位后,执行初始化程序时,定义P1口为位控方式,其中P1.0和P1.1定义为输入,P1.2和P1.3定义为输出。P1.2初始化为"1",P1.3初始化为"0",这样发送信号处于停止位(差分电平"1")。定义INT0为负沿触发。允许中断且定义成高优先级,然后开中断,两机进入随时可开始串行通信的等待状态。A、B不通信时,两机的收发均为"1",一旦某机(假设为A)需要与对方通信,A机以约定的波特率(假定为9600bps),通过P1.2和P1.3发送。发关和接收一个字节的过程如下:

A机发送端首先发送起始位("0"电平),B机INT0引脚产生下跳沿后,产生中断申请。B机CPU响应此中断后,执行INT0中断服务子程序。在中断服务子程序开始,用位输入指令读入P3.6状态,如果是"1"电平,则表明此次中断是受干扰所致,因而取消此次接收过程,中断返回;如果P3.6状态读入电产是"0",则表明本次中断确系A机发送超始位所引起,经精确延时,在A机发送各数据位中间处进行采样,获得各数据位的状态,最后生成一个字节,送有关单元之后中断返回。虽然送往INT0的信号为TTL电平,但是由于它的传输速率非常之低,加上软件抗干扰措施,所以仍然可以有效地传输1200米。

软件串行中远程通信的关键是如何以较高的波特率可靠地实现数据的发送和接收。下面介绍一组以9600bps波特率设计,用MCS-51汇编语言编写的具有很强抗干扰能力和很高可靠性的收发一个字节的子等等程序。

软件串行通信的编程

串行通信要实现成功接收必须解决以下关键技术:(1)要准确、快速检测出对方发

相关IC型号

热门点击

 

推荐技术资料

硬盘式MP3播放器终级改
    一次偶然的机会我结识了NE0 2511,那是一个远方的... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!