主机在从机处去数据,然后显示到液晶屏上,一开始还行,但是现在什么都不显示了,主机用按键控制在哪个从机处取数据。。附上我的程序,,大神,指教指教我,快哭了
主机: void master()
{
if(key1==0)
{
RS485_DIR=1;
SBUF=0x01;
while(TI==0);
TI=0;
SM2=0;
delay(100);
RS485_DIR=0;
for(i=0;i<2;i++)
{
while(RI==0);
RI=0;
str[i]=SBUF;
}
SM2=1;
display1();
iscii_change();
display2();
key1 = 1;
}
if(key2==0)
{
delay(5);
if(key2==0)
{
RS485_DIR=1;
SBUF=0x02;
while(TI==0);
TI=0;
SM2=0;
delay(100);
RS485_DIR=0;
PON=SBUF;
while(RI==0);
RI=0;
SM2=1;
iscii_change2();
display4();
key2 = 1;
}
}
}
void main()
{
Lcd_Init();
TMOD = 0x20;
TH1 = 0xFD;
TL1 = 0xFD;
TR1 = 1;
PCON = 0x00;
SCON = 0xF8;
ES=1;
EA=1;
EX0=1;
IT0=1;
TI=0;
RI=0;
while(1)
{
master();
}
}
从机2: void main()
{ tab=34;
TMOD = 0x20;
TH1 = 0xFD;
TL1 = 0xFD;
TR1 = 1;
PCON = 0x00;
SCON = 0xF0;
EA=1;
ES=1;
DE=0;
RE=0;
while(1)
{
tab=34;
_nop_();
}
}
void serial (void) interrupt 4 using 1
{
ES=0;
RI=0;
if(SBUF==0x02)
{
SM2=0;
tab=34;
RE=1;
DE=1;
SBUF=tab;
while(TI==0);
TI=0;
RE=0;
DE=0;
SM2=1;
ES=1;
}
}
while(1)
{
master();
delay_ms(200);//加个延时
}
还有,你这样子写,变量什么的比较难懂你的意思,你不如用语言表达你的程序逻辑就行了。
先不用按键控制,只读取其中一个从设备的数据,看看显示是否正常。现在一上电就不正常吗
是这样的,按键控制主机取哪个从机里的数据,按键1就取第一个从机,按键按下后,先有一个延时消抖,然后置485芯片为发送状态,发送SBUF=0x01,就是第一个从机的地址帧,第一个从机收到后,把从机一里面的数据写到SBUF里面发送到主机里,这时候主机就改为接收状态,接收数据,然后显示。就是这样一个过程,但是现在就是显示不出来了
那样是可以的,因为一开始就没有用按键,现在是在原来的基础上加的,一开始还可以,后来突然显示不出来,然后我把芯片什么的换了一遍还是不行