51 多机通信问题
本帖最后由 jinshaopu 于 2012-7-19 10:16 编辑真接上程序先
void SerialInit(void)
{
SCON = 0xF0;
SM2=1;
RB8=0;
PCON = 0x00;
TMOD = TMOD & 0x0f;
TMOD = TMOD | 0x20;
TH1 = 0xfd; //com is 9600 b/s
TR1 = 1;
ES = 1;
}
void comm(void) interrupt 4
{
uint8 data temp;
OS_INT_ENTER();
if (RI == 1)
{
RI = 0;
if (RB8 == 1) //接收到地址
{
RB8=0;
if (address==SBUF) //如果是本机地址或者是广播地址 就开接收中断
{
SM2=0;
}
else
{
SM2=1;
}
}
else
{
#if EN_OS_Q_POST > 0
OSQPost(SerialInData,SBUF);
#endif
#if EN_OS_Q_POST_FRONT > 0
OSQPostFront(SerialInData,SBUF);
#endif
}
}
if (TI == 1)
{
TI = 0;
if (OSQAccept(&temp,SerialOutData) == OS_Q_OK)
{
SBUF = temp;
}
else
{
SerialCanSend = 1;
}
}
OSIntExit();
}
上面的串口接收程序 我觉的没有问题,可是用protues和虚拟串口调试的时候收到的数据RB8都是1,我以为是我用软件模拟的上位机串口设置的问题就用protues又仿真一个简单的上位机
发送程序如下
TB8=1; //传说中发送地址要将这位置1
SBUF=0x01;
while(!TI);
TI=0;
OSWait(K_TMO,20);
TB8=0; //传说中发送数据要将这位置0
SBUF=0x51;
while(!TI);
TI=0;
TB8=0;
SBUF=0x51;
while(!TI);
TI=0;
TB8=0;
SBUF=0xf0;
while(!TI);
TI=0;
TB8=0;
SBUF=0xaa;
while(!TI);
TI=0;
TB8=0;
SBUF=0xaa;
while(!TI);
TI=0;
两个protues仿真同时开用虚拟串口相连 悲剧就出现了 只能收到TB8=1时的0x01 后面TB8=0时的数据是无论如何收不到。什么问题??大侠来看看
是不是虚拟串口的问题啊
大家可以不用想了 我刚刚把两个单片机放在同一个protues搞了一下没有问题可以肯定是虚拟串口的问题
页:
[1]