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;
}
}****
你的主机的RD引脚都没有接啊