用max485 51单片机多机通信问题
就是这张原理图,用串行口方式三,unsignedchari;P35=1;//发送TB8=1;//发送地址帧SBUF=0x02;delay(10);while(!TI);T...
就是这张原理图,用串行口方式三,
unsigned char i;
P35=1; //发送
TB8=1; //发送地址帧
SBUF=0x02;
delay(10);
while(!TI);
TI=0;
delay(10);
P35=0; //接收
while(!RI)
delay(10);
RI=0;
P2=SBUF;
这是主函数,置TB8为1,发送地址帧01,置从机SM2都为1,然后我在中断里比较地址
if(RB8)
{
if(SBUF==0x01) (2好从机为02)
{
RI=0;
SM2=0;
delay(10);
P35=1;//fasong
SBUF=0x12;
a=0x12;
while(!TI)
TI=0;
P35=0;
}
}
按说这样我如果发地址为01时数据应该是给01机子的,但是两个机子都有数据,求大神指点,或者给我个例子我看看。。。。。。。 展开
unsigned char i;
P35=1; //发送
TB8=1; //发送地址帧
SBUF=0x02;
delay(10);
while(!TI);
TI=0;
delay(10);
P35=0; //接收
while(!RI)
delay(10);
RI=0;
P2=SBUF;
这是主函数,置TB8为1,发送地址帧01,置从机SM2都为1,然后我在中断里比较地址
if(RB8)
{
if(SBUF==0x01) (2好从机为02)
{
RI=0;
SM2=0;
delay(10);
P35=1;//fasong
SBUF=0x12;
a=0x12;
while(!TI)
TI=0;
P35=0;
}
}
按说这样我如果发地址为01时数据应该是给01机子的,但是两个机子都有数据,求大神指点,或者给我个例子我看看。。。。。。。 展开
展开全部
多机通信,不一定画上 MAX485,直接连接,就可以实验程序了。
前面初始化,已经是 SM2=1,只能收到 TB8=1 的数据。
所以,程序中,并不需要再判断 RB8 是否为一。
;-------------------
if (RI) {
RI = 0;
a = SBUF;
if(a == 0x01) { // (2好从机为02)
SM2 = 0;
delay(10);
P35 = 1; //fasong
SBUF = 0x12;
while(!TI); //--楼主这里漏掉了分号
TI = 0;
P35 = 0;
SM2 = 1; //继续设置为仅收取 TB8=1 的状态
}
}
参考:
http://hi.baidu.com/do_sermon/item/46b7c92b103d24cea4275a77
前面初始化,已经是 SM2=1,只能收到 TB8=1 的数据。
所以,程序中,并不需要再判断 RB8 是否为一。
;-------------------
if (RI) {
RI = 0;
a = SBUF;
if(a == 0x01) { // (2好从机为02)
SM2 = 0;
delay(10);
P35 = 1; //fasong
SBUF = 0x12;
while(!TI); //--楼主这里漏掉了分号
TI = 0;
P35 = 0;
SM2 = 1; //继续设置为仅收取 TB8=1 的状态
}
}
参考:
http://hi.baidu.com/do_sermon/item/46b7c92b103d24cea4275a77
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询