这是我做的三个单片机的通信,一个主机,两个从机,现在的问题是,有一个可以正常通信,但是当我切换,需要通信另一块时,全都不行了,求教啊这是主机的程序
#include<reg52.h>
#include"stc12.h"
#define uchar unsigned char
#define uint unsigned int
#define addr1 0x31 //从机1地址
#define addr2 0x32 //从机2地址
sbit S1=P1^0;
sbit S2=P1^1;
sbit d1=P1^2;
sbit d2=P1^3;
void delay(uint z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void ck_init()
{
SCON=0xf0;
BRT=0xe6;
AUXR=0x11;
TI=1;
RI=1;
ES=1;
EA=1;
}
uchar jieshou(void) //接收数据
{
uchar shuju;
shuju=SBUF;
while(!RI);
RI=0;
return shuju;
}
void fasong_dizhi(uchar dizhi) //发送地址
{
uchar temp;
while(temp!=dizhi) //如果主机发送的地址和从机应答的不一样的话,就一直发送
{
ES=0;
TB8=1;
SBUF=dizhi;
while(!TI);
TI=0;
ES=1;
temp=jieshou();
// if(temp==dizhi)
// break;
}
}
void fasong_shuju(uchar date) //发送数据
{
TB8=0;
SBUF=date;
while(!TI);
TI=0;
//置1表示发送的是数据
}
void main()
{
ck_init();
while(1)
{
if(S1==0)
{
delay(5);
if(S1==0)
{
while(!S1);
fasong_dizhi(addr1);
d1=0;
fasong_shuju('a');
fasong_shuju('a');
}
}
if(S2==0)
{
delay(5);
if(S2==0)
{
while(!S2);
fasong_dizhi(addr2);
ES=1;
d2=0;
fasong_shuju('b');
fasong_shuju('b');
}
}
}
}
void zd() interrupt 4
{
ES=0;
}
这是从机的程序,放不下了,麻烦大家去我的网盘看看,我怎么弄都不行http://pan.baidu.com/s/1dGUdS
我是把两个从机的TXD接一起,然后和主机的RXD连接,从机的RXD都接一起,和主机的TXD连接,这样应该是总线分挂从机吧?
追答是的.总线模式.从机通讯线上最好加个电阻.同时,使用空闲地址帧模式实现多机通讯.原理上面已经说过了.
追问是每条从机的TXD和RXD都加100欧姆吗,因为我是全部都连在一起了,还是只要加1个100欧姆就可以了,我线是这样接的,那电阻应该接在哪啊
每个从机通讯线上加电阻.
测试软件时可以不加.长期使用最好加.