求助:由电脑和两个51最小系统板构成485总线控制系统。主机发送地址,从机可以响应,和该地址匹配的从机返回响应消息,此时本应该是只有主机收到返回消息,可是我这里却是,另一个从机也收到这个消息了,从而进入串口中断。请问有前辈知道这是什么原因吗
程序:#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define SIZE 5
#define SLAVE 01
uchar aa;
uchar flag=0;
sbit led=P3^7;
sbit ctr485=P3^5;
void delayms(uint);
void ser_init();
void ser_uchar_send(uchar);
void main()
{
ser_init();
while(1)
{
if(flag==1)
{
ser_uchar_send(SLAVE);
ctr485=0;
ES=1;
flag=0;
}
}
}
void ser_init()
{
TMOD=0X20|(TMOD&0x0f); //time1 8位自动装载 gate c/t m1 m0 gate c/t m1 m0
TH1=0xfd; //波特率9600
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ET1=0;
ES=1;
ctr485=0;
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=467;j>0;j--);
}
void ser_uchar_send(uchar a)
{
ES=0;
SBUF=a;
while(!TI);
//led=0;
TI=0;
ES=1;
// flag=0;
}
void ser() interrupt 4
{
RI=0;
aa=SBUF;
led=0;
delayms(1000);
led=1;
delayms(1000);
if(aa==SLAVE)
{
led=0;
delayms(1000);
led=1;
delayms(1000);
flag=1;
ctr485=1;
delayms(20);
}
else
return;
}
原理图 |