51 多机通信问题

2020-02-05 08:46发布

本帖最后由 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时的数据是无论如何收不到。什么问题??大侠来看看
是不是虚拟串口的问题啊

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。