proteus多机通信多对一(两主机向一从机发送信息)

proteus多机通信多对一(两主机向一从机发送信息)
下面附有我的源代码,从机可以显示数据,但主机
没反应,不能显示发送的数据


****从机一发送信息
#include <reg51.h>
#define NODE1_ADDR 1
unsigned char pointer_1=0;
unsigned char str[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void proc_key();
void delay(unsigned int time)
{
  unsigned char i, j;
  for(i=0;i<130;i++)
     for(j=0;j<time;j++);
}
void main() 
{
  SCON=0xe0;
  TMOD=0x20; 
  TH1=TL1=0xfd; 
  TR1=1; 
  while(1){
       P1=0xff;
        
        if(P1=0xfe) proc_key();
        
    }
}
void proc_key()
{
  delay(200);
  TB8=1; 
  SBUF=NODE1_ADDR;
  while(!TI); 
  TI=0; 
  TB8=0; 
  while(!TI){
         SBUF=str[pointer_1++]; 
         if(pointer_1>=16) pointer_1=0; 
         P2=SBUF; 
             delay(100);
    }
TI=0;
}
从机二发送信息
#include <reg51.h>
#define NODE1_ADDR 1
unsigned char pointer_2=0;
unsigned char str[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void proc_key();
void delay(unsigned int time)
{
  unsigned char i, j;
  for(i=0;i<130;i++)
     for(j=0;j<time;j++);
}
void main() 
{
  SCON=0xe0;
  TMOD=0x20; 
  TH1=TL1=0xfd; 
  TR1=1; 
  while(1){
       P1=0xff;
        
        if(P1=0xfe) proc_key();
        
    }
}
void proc_key()
{
  delay(200);
  TB8=1; 
  SBUF=NODE1_ADDR;
  while(!TI); 
  TI=0; 
  TB8=0; 
  while(!TI){
         SBUF=str[pointer_2++]; 
         if(pointer_2>=16) pointer_2=0; 
         P2=SBUF; 
             delay(100);
    }
TI=0;
}
主机接受信息
#include <reg51.h>
#define NODE2_ADDR 2
#define NODE3_ADDR 3
unsigned char i, j;
unsigned char node_number;
unsigned char num[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void display(unsigned ch,unsigned char node_number) {
    switch(node_number){
        case 2:
  if((ch>=48)&&(ch<=57)) P1=num[ch-48];
  else if((ch>=65)&&(ch<=70)) P1=num[ch-55];
        break;
        case 3:
            if((ch>=48)&&(ch<=57)) P2=num[ch-48];
  else if((ch>=65)&&(ch<=70)) P2=num[ch-55];
        break;
        default:break;
    }
}

void main()
{
  SCON=0xe0; 
  TMOD=0x20; 
  TH1=TL1=0xfd; 
  TR1=1; 
  ES=1; 
  EA=1; 
  while(1);
}
void receive() interrupt 4
{
  RI=0;
  if(RB8==1) {
        switch(node_number){
            case 2:
      SM2=0;
      display(SBUF,NODE2_ADDR);
      SM2=1;
        break;
      case 3:
      SM2=0;
      display(SBUF,NODE3_ADDR);
      SM2=1;
        break;
        default:break;
    }
        return;
 }
}****

img

img

你的主机的RD引脚都没有接啊