基于89S51单片机的多机并行通信系统

发布者:SecretWhisper最新更新时间:2010-11-19 关键字:多机通信  接口驱动芯片  握手  中断 手机看文章 扫描二维码
随时随地手机看文章

    在一些复杂的系统中,系统与分系统、分系统与设备等之间存在数据的传递问题,往往采用通信的方式来解决。由于分系统、没备等通信波特率的不同,特别是一些特殊波特率设备的存在,使得系统中设备间的相互通信不易实现。例如,在一个系统中,上位机接收某一设备的数据,如图1所示,设备l和设备2采用的是172.8 kbps的波特率,而上位机用VB编程,其通信波特率为115.2 kbps、128 kbps或256 kbps,等,这样设备之间就不能相互通信,给设计带来困难。为了解决上述问题,采用双单片机电路,设计了波特率变换器,将接收波特率为172.8 kbps的数据,转换成波特率为115.2 kbps的输出,从而使不同波特率设备之间的通信成为可能。

1 波特率变换电路

    波特率变换电路如图2所示。电路采用2片单片机89C51作为电路的核心,利用单片机的UART串行口与相关设备通信。单片机u1_L.(接波特率低的设备)与波特率为115.2 kbps的设备通信,单片机U2_H(接波特率高的设备)与波特率为172.8 kbps的设备通信。Ul_I,与U2_H的通信采用并行口方式,以加快Ul_I。与U2_H之间数据传递的速率。U1_L与U2_H的通信可以采用中断查询的方式,也可以采用握手查询的方式进行数据传递。

    电路采用2片75176接口驱动芯片组成一个RS-422通信接口。U3和U4组成的通信接口与115.2 kbps的设备相连,U5和U6组成的通信接口与172.8 kbps的设备相连,通信接口采用中断技术。波特率变换器工作原理如下:U1_I。从串行口收到设备的数据后,从Pl口输出数据,并通知U2_H取数,U2_H取到数据后向设备发出数据,同时通知Ul_I.已取走数据,为U1一L下一次输出数据做准备。当U2_H从串行口收到设备的数据后,查询U1_I,是否允许接收数据,如允许接收数据,U2_H从P1口输出数据,并通知Ul_L取数,Ul_L取到数据后向设备发出数据,同时通知U2_H已取走数据,为U2_H下一次输出数据做准备;如Ul_L不允许接收数据,则U2_H暂缓送数。

2 波特率变换器的应用

    波特率变换器在应用中,根据使用情况可以分为单向传送和双向传送。两单片机之间的数据传递可以采用中断方式.也可以采用查询方式。如采用查询方式,编程时利用P2口的几位作为查询信号,实现单向或双向传送。

2.1 单向传送

    单向传送就是通信口的数据流只向一个方向,即从Ul_L接收到的数据,从U2_H发送出去,或从U2_H接收到的数据,从Ul_L发送出去。用这种方式进行软件编程比较简单。现以U1_L只接收外部设备数据,U2_H只向外部设备发送数据,采用查询方式为例,两单片机之间数据传送的流程图如图3所示。其中Ul_L的P2.2作为向U2_H传送新数据的查询信号(U2_H的P2.5),P2.2=“0”表示有新的数据,P2.2=“1”表示没有新的数据;U2_H的P2.2作为接收U1_L数据的查询信号(U1_L的P2.5),P2.2=“O”表示可以接收新的数据,P2.2=“1”表示不能接收新的数据。如果采用中断方式,两单片机的查询信号更简单,只要Ul_L查询U2_H是否可以接收数据的信号就可以,U2_H无需查询U1_L的查询信号。

2.2 双向传送

    双向传送就是通信口可以同时接收数据和发送数据,数据流是双向的,Ul_L和U2_H既接收数据也发送数据。这种方式软件编程比较复杂,特别是双向传送数据采用查询方式时。单片机之间的查询信号就更加复杂了。现以双向查询方式为例,两单片机之间数据传送的流程图如图4所示,U2_H的流程与U1_L一样。其中U1_L向U2_H传送数据时的查询信号与单向传送的定义一样,U2_H的P2.3作为向U1_L传送新数据的查询信号(U1_L的P2.4),P2.3=“0”表示有新的数据,P2.3=“l”表示没有新的数据;Ul_L的P2.3作为接收U2_H数据的查询信号(U2_H的P2.4),P2.3=“O”表示可以接收新的数据,P2.3=“1”表示不能接收新的数据。如果采用中断方式,查询信号可以减少,编程可以简化。

2.3 应用时的注意事项

    两个单片机之间的握手方式如果采用中断,由于U2_H向外部发送数据比U1_L接收外部数据快,Ul_L向U2_H传送数据时,无需考虑U2_H的状态,而U2_H向U1_L传送数据时,由于U2_H接收外部数据比U1_L向外部发送数据快,U2_H必须查询Ul_L的状态,即U1_L是否处于接收U2_H数据的状态,否则,U2_H就不能向Ul_L传送数据。

    若作为RS_485通信接口使用,只需对图2中的电路稍做改动,增加对75176芯片的读写控制,同时两个单片机中与主通信设备相连的单片机作为主机,通过P2口的一位来协调两个单片机是接收数据还是发送数据。

值得注意的是,该波特率变换器在不同的应用中会受到一定的限制,在使用时要注意下面几点:

①波特率很高时,要考虑单片机串行口能否实现;

②从波特率高的向波特率低的变换时,要考虑波特率低的单片机能否实现不丢数据的发送;

③当双向变换时,既要考虑上述情况,还有考虑程序的大小,以及执行时间对双向传送数据的影响,计算两个单片机能否实现不丢数据的变换,在时间上要留有余量;

④在查询时,要注意握手信号的关系,不要对同一数据产生重复读取,以至于数据重复;

⑤波特率不同时,单片机可以选用不同的晶振频率。

2.4 实例及源程序

    在实际使用中若碰到如图1所示的情况,需要波特率变换器将坡特率为172.8kbps的通信数据转换成波特率为115.2kbps,再向上位机传送。实际使用的电路如图2所示。在该实例中,为了防止局部时刻接收数据比发送快而丢失数据,再U2_H单片机的程序中,加入了8个数据区作为接收数据存放缓冲区。

3 结论
 
    通过长时间的通信实验和实际应用,设计的波特率变换器方案可行,通信可靠,没有出现数据丢失的情况。在一些系统中,由于通信波特率特殊,在设备之间通信存在波特率不匹配时,通过波特率变换器,可以实现不同波特率设备之间的通信。通过更改单片机的晶频振率,可以满足各种波特率(在单片机允许的范围内)的转换。

关键字:多机通信  接口驱动芯片  握手  中断 引用地址:基于89S51单片机的多机并行通信系统

上一篇:基于SSD1303及AT89C51驱动OLED显示屏
下一篇:基于单片机设计的通用汉字文本播音系统

推荐阅读最新更新时间:2024-03-16 12:31

51单片中断笔记
一、中断的概念 对于单片机中断,可以简单理解为在看电视的过程中,突然蹦出一个广告,广告过了在继续播放之前的节目。CPU在处理事件A时,发生了另一事件B,请求CPU迅速去处理(中断发生),CPU中断当前的工作,转去处理事件B(中断响应和中断服务),待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回)。 二、基本中断源 1.51单片机中的5个重要中断 单片机的应用与开发,实际上就是通过单片机的三个重要外设,即外部中断、定时器/计数器和串口来实现对寄存器的操作。 三、中断结构图 四、特殊功能寄存器 IE :中断控制寄存器 IP :中断优先级寄存器 TCON :中断状态标志寄器 TMOD :定
[单片机]
NVIC中断控制 函数实现
对于NVIC的任务,可以概括为三个: 1.配置中断向量表--如果不配置,则不能进入中断 SCB- VTOR 2.配置系统中断分组--决定了第一和第二优先级各占用的位数 SCB- AIRCR 3.配置对应中断优先级和使能中断--中断使能 ISER 中断优先级IPR 只要按照这样配置,就可以使用中断了 1 /****************************************************** 2 *函数: NVIC_Group(u8 group) 3 *功能: 设置中断分组 4 *参数: group-对应分组号 0~4 共5组 5 *返回: 无 6 ************
[单片机]
ARM嵌入式系统的中断服务例程跳转
在32位ARM系统中,一般都是在中断向量表中放置一条分支指令或PC寄存器加载指令,实现程序跳转到中断服务例程的功能。 例如: IRQEntry B HandleIRQ ;跳转范围较小 B HandleFIQ 或IRQEntry LDR PC,=HandleIRQ ;跳转的范围是任意32位地址空间 LDR PC,=HandleFIQ LDR伪指令等效生成1条存储读取指令和1条32位常数定义指令。32位常数存储在LDR指令附近的存储单元中,相对偏移小于4KB。该32位数据就是要跳转到的中断服务程序入口地址。 之所以使用LDR伪指令,是因为ARM的RISC指令为单字指令,不能装载32位的立即数(常数),无法直接把一个32位常数数据或
[单片机]
stm32在中断函数里执行初始化函数
最近用了stm32f030c8t6,要求做低功耗: 1、关闭外设时钟并把管脚都配置成模拟输入后,大概满足要求了,然后进入stop模式。 2、接着由外部中断唤醒,唤醒后重新初始化所有的外设,继续运行。 但是唤醒后程序一直停在延时函数的地方,原来是systick中断函数不能执行了。找了好久才想起来,我的唤醒初始化函数是在外部中断函数中执行的,初始化函数中用了延时函数,延时需要执行systick中断函数,中断函数执行不完,systick自然不能执行中断函数,所以一直停着不动了。
[单片机]
ATmega32外部中断嵌套
#include iom32v.h #include macros.h #pragma data:code const table ={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0xff}; #pragma interrupt_handler int0:2 void int0() { PORTC&=~BIT(0); PORTA=table ; while(1); } #pragma interrupt_handler int1:3 void int1() { PORTC&=~BIT(0); PORTA=table ; SEI();
[单片机]
单片中断举例
单片机中断举例 单片机多任务执行。P1口LED灯闪烁、P3口按键输入,两任务 同时 执行。 方案一:在主程序中循环调用P1口LED灯闪烁子程序,P3口按键扫描子程序; 缺点:可能造成P3口按键输入不灵的现象; 方案二:主程序一直循环调用P1口LED灯闪烁子程序,P3口按键程序采用中断执行。 以下程序将两个外部中断全部打开,同学们可以在proteus中验证。 //******************************** //51单片机中断嵌套程序演示 //作者:曾宪阳 //网址:http://hi.baidu.com/zxymcu //*************************
[单片机]
STC12C5A60S2 串口中断接收程序
#define UART0_BUF_LEN 32 int UART1_Recv_count; //接收计数 bit UART1_Overflow_Flag; //缓冲区满标志 idata uchar UART1_Recv_BUF ; //串口接收缓冲区 //串口初始化 void Init_Uart() { UART1_Overflow_Flag=0; UART1_Recv_count=0; //22.1184M 晶振 115200波特率 PCON &= 0x7f; //波特率不倍速 SCON = 0x50; //8位数据,可变波特率 BRT = 0xFA; //设定独立波特率发生器重装值
[单片机]
STC12C5A60S2 串口<font color='red'>中断</font>接收程序
关于ARM的三种中断调试方法介绍
  嵌入式软件开发流程   参照嵌入式软件的开发流程。第一步:工程建立和配置。第二步:编辑源文件。第三步:工程编译和链接。第四步:软件的调试。第五步:执行文件的固化。   在整个流程中,用户首先需要建立工程并对工程做初步的配置,包括配置处理器和配置调试设备。编辑工程文件,包括自己编写的汇编和C语言源程序,还有工程编译时需要编写的链接脚本文件,调试过程中需要编写存储区映像文件和命令脚本文件,以及上电复位时的程序运行入口的启动程序文件。   对后四种文件的理解很重要,其作用解释如下。   (1) 链接脚本文件:在程序编译时起作用。该文件描述代码链接定位的有关信息,包括代码段,数据段,地址段等,链接器必须使用该文件对整个系统的代码
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved