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

51系列单片机双CPU系统通信方法

发布时间:2008/5/27 0:00:00 访问次数:316

引 言
本文介绍一种新颖的方法来实现51系列单片机双cpu系统。该方法灵活地运用了51单片机的id工作方式,使没有hold功能的51单片机能够直接通过片外ram进行数据通信。不但硬件和软件的实现都比较简单,数据传输速度快,而且不涉及高成本特殊器件。对一般51单片机系统的设计有一定的参考意义。

1 实现双处理器的一般方法

① 使用双口ram。这种方法方便地实现了cpu之间的通信,在选择cpu接口时具有较大的灵活性;但这种方法会增加电路设计的难度和成本。
② 利用i/o口进行并行通信。这种方法既要用i/o口传送数据,又要用i/o口来进行传送的控制,因此占用较多的i/o口;而且控制过程涉及进行通信的两个cpu,软件设计比较复杂。
③ 利用串口进行通信。使用uart或i2c总线来联系cpu也是常用的方法。这种方法实现简单,只是传输速度较慢。
④共享内存。共享内存实际上又有两种不同实现。第一种如lon网络的neuron节点芯片,利用不同时序实现共享内存。这种方法必须制成专用芯片,把cpu和ram封装在一起,一般情况下实现困难。第二种如96系列单片机,使用hold线先挂起其中一单片机的总线,以使用其内存。这种方法简单而且传输速度快,在具有hold功能的cpu系统中经常使用这种方法实现双cpu。

2 使用共享内存法实现双cpu通信

由于51单片机没有hold功能,一般不能使用共享内存法实现双cpu通信。这里介绍一种方法,使一般51单片机能够用共享内存实现双cpu通信。该方法电路简单,软硬件实现容易;数据传输速度快,而且占用系统资源少(不使用i/o口传递数据,而用一部分地址空间作为数据传送的媒体),能充分发挥双cpu的作用。下面具体介绍这种方法。

2.1 基本设计方案
首先,甲机划出一部分片外ram的地址空间作为数据传输的专门通道(一般可用高端地址空间);同时,把这个地址空间映射到接收数据的乙机端的相同大小片外ram地址空间(乙机端可以直接访问到)。两边需要传递数据时,甲机就直接向这个地址读写数据。读写数据之前,两边要先联络,做好数据传输前的准备。

两边数据线要用开关门电路隔开,可以用三态门。地址线也按照设计者的安排,甲机端经过开关门电路直接映射到乙机端特定片外ram地址。因为甲机要在乙机这边读写数据,所以甲机对片外ram的读写选通信号也要经过开关接到乙机读写端。发送数据前,要打开这些开关门电路。这样,甲机就可以在乙机的片外ram中读写数据了。

最后,还有一个重要工作。两边的cpu有自己独立的工作,彼此独立地在自己的数据线和地址线运行程序,要共用乙机的ram来实现通信就必须在传送通信数据期间让乙机交出总线控制权,而51单片机又不具备96单片机的hold功能,怎样才能让乙机交出总线控制权?这里要用其它方法。51系列单片机本身有id工作方式(空闲状态),id方式可以用中断唤醒。我们可以利用id工作方式让乙机暂停工作,从而让甲机cpu在乙机这边存取数据。
2.2 具体实现方法
图1是两个51单片机组成的双机系统。我们把左边甲机的普通片外ram地址寻址空间分为0000h~7fffh和8000h~0ffffh两个不同的区域。其中,0000h~7fffh可作为普通片外ram空间,8000h~0ffffh可作为数据传输通道。在这里,我们把8000h~803fh的片外ram寻址空间映射到右端乙机的0000h~003fh的地址空间。(其实甲机8000h以上的任意地址都会映射到相应的乙机0000h ~003fh空间。这里为简单起见,只用甲机的最高位地址线直接线选,并约定甲机的通信数据都往8000h~803fh中写。)因此,甲机端的低六位地址线通过74als373接到乙机端的低六位地址线。同时,读写控制线也接过来。两边的数据线通过74als245接起来以进行双向数据传输。不传数据时,乙机的p1.7为高电平,74als373处于高阻态,74als245也因为没有被甲机的地址线选通而呈高阻态,两边的cpu可以在自己的空间运行程序,保持相对独立。甲单片机p1.0接到乙机的int0脚,可通知乙单片机做传输数据的相应处理,同时可以通过中断来唤醒处于id状态的乙机。传数据时,乙机的p1.7为低电平,打开74als373,同时乙机的p1.7还接到甲机的int0口,以通知甲机可以开始送数或取数。甲机最高位地址线a15作为数据选通信号,使甲机端可以读写乙机端0000h~003fh地址空间ram中的数据。数据传送方向由乙机的p1.6脚进行控制。
  甲机要把数据传到乙机时,先通过p1.0输出一个下降沿脉冲到乙机的int0口通知乙单片机,乙机中断服务程序判断是甲机要送数据过来,用指令
   mov dptr, #003fh
   mov a, #0ffh
   movx @dptr 0ffh
把地址线置为003fh,p0口置为ffh。为什么要做这个工作呢?因为乙机把地址线置为003fh后,进入id状态,地址线会保持这种状态,甲机就可以控制乙机的低六位地址线;同时乙机的高十位地址线保持为"0",这样就确保了甲机的

引 言
本文介绍一种新颖的方法来实现51系列单片机双cpu系统。该方法灵活地运用了51单片机的id工作方式,使没有hold功能的51单片机能够直接通过片外ram进行数据通信。不但硬件和软件的实现都比较简单,数据传输速度快,而且不涉及高成本特殊器件。对一般51单片机系统的设计有一定的参考意义。

1 实现双处理器的一般方法

① 使用双口ram。这种方法方便地实现了cpu之间的通信,在选择cpu接口时具有较大的灵活性;但这种方法会增加电路设计的难度和成本。
② 利用i/o口进行并行通信。这种方法既要用i/o口传送数据,又要用i/o口来进行传送的控制,因此占用较多的i/o口;而且控制过程涉及进行通信的两个cpu,软件设计比较复杂。
③ 利用串口进行通信。使用uart或i2c总线来联系cpu也是常用的方法。这种方法实现简单,只是传输速度较慢。
④共享内存。共享内存实际上又有两种不同实现。第一种如lon网络的neuron节点芯片,利用不同时序实现共享内存。这种方法必须制成专用芯片,把cpu和ram封装在一起,一般情况下实现困难。第二种如96系列单片机,使用hold线先挂起其中一单片机的总线,以使用其内存。这种方法简单而且传输速度快,在具有hold功能的cpu系统中经常使用这种方法实现双cpu。

2 使用共享内存法实现双cpu通信

由于51单片机没有hold功能,一般不能使用共享内存法实现双cpu通信。这里介绍一种方法,使一般51单片机能够用共享内存实现双cpu通信。该方法电路简单,软硬件实现容易;数据传输速度快,而且占用系统资源少(不使用i/o口传递数据,而用一部分地址空间作为数据传送的媒体),能充分发挥双cpu的作用。下面具体介绍这种方法。

2.1 基本设计方案
首先,甲机划出一部分片外ram的地址空间作为数据传输的专门通道(一般可用高端地址空间);同时,把这个地址空间映射到接收数据的乙机端的相同大小片外ram地址空间(乙机端可以直接访问到)。两边需要传递数据时,甲机就直接向这个地址读写数据。读写数据之前,两边要先联络,做好数据传输前的准备。

两边数据线要用开关门电路隔开,可以用三态门。地址线也按照设计者的安排,甲机端经过开关门电路直接映射到乙机端特定片外ram地址。因为甲机要在乙机这边读写数据,所以甲机对片外ram的读写选通信号也要经过开关接到乙机读写端。发送数据前,要打开这些开关门电路。这样,甲机就可以在乙机的片外ram中读写数据了。

最后,还有一个重要工作。两边的cpu有自己独立的工作,彼此独立地在自己的数据线和地址线运行程序,要共用乙机的ram来实现通信就必须在传送通信数据期间让乙机交出总线控制权,而51单片机又不具备96单片机的hold功能,怎样才能让乙机交出总线控制权?这里要用其它方法。51系列单片机本身有id工作方式(空闲状态),id方式可以用中断唤醒。我们可以利用id工作方式让乙机暂停工作,从而让甲机cpu在乙机这边存取数据。
2.2 具体实现方法
图1是两个51单片机组成的双机系统。我们把左边甲机的普通片外ram地址寻址空间分为0000h~7fffh和8000h~0ffffh两个不同的区域。其中,0000h~7fffh可作为普通片外ram空间,8000h~0ffffh可作为数据传输通道。在这里,我们把8000h~803fh的片外ram寻址空间映射到右端乙机的0000h~003fh的地址空间。(其实甲机8000h以上的任意地址都会映射到相应的乙机0000h ~003fh空间。这里为简单起见,只用甲机的最高位地址线直接线选,并约定甲机的通信数据都往8000h~803fh中写。)因此,甲机端的低六位地址线通过74als373接到乙机端的低六位地址线。同时,读写控制线也接过来。两边的数据线通过74als245接起来以进行双向数据传输。不传数据时,乙机的p1.7为高电平,74als373处于高阻态,74als245也因为没有被甲机的地址线选通而呈高阻态,两边的cpu可以在自己的空间运行程序,保持相对独立。甲单片机p1.0接到乙机的int0脚,可通知乙单片机做传输数据的相应处理,同时可以通过中断来唤醒处于id状态的乙机。传数据时,乙机的p1.7为低电平,打开74als373,同时乙机的p1.7还接到甲机的int0口,以通知甲机可以开始送数或取数。甲机最高位地址线a15作为数据选通信号,使甲机端可以读写乙机端0000h~003fh地址空间ram中的数据。数据传送方向由乙机的p1.6脚进行控制。
  甲机要把数据传到乙机时,先通过p1.0输出一个下降沿脉冲到乙机的int0口通知乙单片机,乙机中断服务程序判断是甲机要送数据过来,用指令
   mov dptr, #003fh
   mov a, #0ffh
   movx @dptr 0ffh
把地址线置为003fh,p0口置为ffh。为什么要做这个工作呢?因为乙机把地址线置为003fh后,进入id状态,地址线会保持这种状态,甲机就可以控制乙机的低六位地址线;同时乙机的高十位地址线保持为"0",这样就确保了甲机的
相关IC型号

Warning: Undefined variable $stockkeys in G:\website_51dzw\www.51dzw.com\code\tech\view.php on line 152
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式