微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 多机通信的问题,,

多机通信的问题,,

时间:10-02 整理:3721RD 点击:
程序主要是从机发送数据,主机接收并显示,2从1主。可是,数据接收会不正常,请了解的TX帮忙看下原因,谢谢了。
/********主机程序*********/
void main()
{
    SCON=0xd0;  //主机模式3 SM2=0, REN=1;
    TMOD=0x20;
    PCON=0x00;
    TH1=0xfd;   //9600bit/s
    TL1=0xfd;
    TR1=1;
    TI=0;
    RI=0;
    initiallcd();    //1602初始化
    disponechar(12,0,a[0]);
    disponechar(13,0,a[1]);
    disponechar(14,0,a[2]);
    disponechar(15,0,a[3]);
    disponechar(12,1,a[5]);
    disponechar(13,1,a[6]);
    disponechar(14,1,a[7]);
    disponechar(15,1,a[8]);
    addr=0x01;
    while(1)
    {
        uchar a,j;
        while(a!=addr)
        {
            TI=0;
            TB8=1;
            SBUF=addr;
            while(!TI);
            TI=0;
            delay(20);
            while(!RI);
            a=SBUF;
            RI=0;
        }
        switch(addr)
        {
            case 0x01:
            for(j=0;j<2;j++)
            {
                while(!RI);
                buff[j]=SBUF;
                RI=0;   
                temp1=buff[0]+buff[1];            
            }
            disponechar(0,0,wendu[temp1%100/10]);
            disponechar(1,0,wendu[temp1%10]);        
            break;
            
            case 0x02:
            while(!RI);
            temp2=SBUF;
            RI=0;
            disponechar(0,1,wendu[temp2%100/10]);
            disponechar(1,1,wendu[temp2%10]);            
            break;
        }
        addr++;
        if(addr==0x03)
        {   
            addr=0x01;
        }
    }
}
/********从机1程序*********/
void main()
{
    SCON=0xd0;  //主机模式3 SM2=0, REN=1;
    TMOD=0x20;
    PCON=0x00;
    TH1=0xfd;   //9600bit/s
    TL1=0xfd;
    TH0=0x00;   //9600bit/s
    TL0=0x00;
    TR1=1;
    TI=0;
    RI=0;
    while(1)
    {
        uchar a,i;
        SM2=1;   
        while(a!=addr)   //addr=0x01;
        {
            while(!RI);
            a=SBUF;
            RI=0;
        }
        
        TI=0;
        TB8=0;
        SBUF=addr;
        while(!TI);
        TI=0;
        SM2=0;
        delay(20);        
        for(i=0;i<2;i++)
        {
            SBUF=buff[i];
            while(!TI);
            TI=0;
        }   
        SM2=1;
    }   
}
/********从机2程序*********/
void main()
{
    SCON=0xd0;  //主机模式3 SM2=0, REN=1;
    TMOD=0x20;
    PCON=0x00;
    TH1=0xfd;   //9600bit/s
    TL1=0xfd;
    TR1=1;
    TI=0;
    RI=0;
    while(1)
    {
        uchar a;
        SM2=1;
        while(a!=addr)  //addr=0x02;
        {
            while(!RI);
            a=SBUF;
            RI=0;
        }   
        TI=0;
        TB8=0;
        SBUF=addr;
        while(!TI);
        TI=0;
        SM2=0;
        delay(20);
        
        SBUF=temp1;
        while(!TI);
        TI=0;        
        temp1=temp1+2;
        delay(200);delay(200);delay(200);
        SM2=1;
    }
}


用中断试试,就是串口中断,逻辑关系稍微简单点

把你通信部分的硬件电路贴上来看一下

电路图


麻烦各位高手指点一下~

最近在实验多机通信的程序的时候,发现如果主机和多个从机里面发送和接收的时序是一样的话,才能收发正常,假如某个从机有较长延时,比如0.5秒,那么就通信不了。所以我想问一下,多机通信是不是必须要保持主从机时序一致?如果时序不一致,有没有什么方法解决通信问题?谢谢了。

小编 在吗 我做的题目刚好和你一样 希望向你请教几个问题 QQ 592109366

坐等答案

小编 在吗 我做的题目和你类似  想请教你几个问题 这个是我qq592109366

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top