打印

求助:485总线冲突问题

[复制链接]
2506|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
求助:由电脑和两个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;
   
     }

原理图

485.jpg (54.83 KB )

485.jpg

相关帖子

沙发
xiaolifeidao| | 2011-8-24 12:44 | 只看该作者
多机通讯肯定是都进入中断进行判断的

使用特权

评论回复
板凳
兴隆| | 2011-9-24 09:40 | 只看该作者
51单片机,发送数据有第九位,控制是不是引起中断。这位设置不同,就可以解决这个问题。

使用特权

评论回复
地板
xwhua188| | 2011-9-26 11:43 | 只看该作者
多机通讯,在同一时刻肯定只有一对在通讯的,抢总线,拉总线,肯定不行啦。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

16

帖子

0

粉丝