PIC异步串行问题请教

2020-02-10 08:41发布

本人在做一个485SCI的串行传输,遇到一点问题,想请教请教遇到过的朋友,现象如下:
    主从两块板,主板收集8块IO板的信息,存储在IOS[8]一维数组里面(每一块IO板的信息存进相应的IOS位置中),通过485异步串行通讯把该数组发给从板,存在从板的IOS[8]数组里面,并通过从板相应的IO板显示出来。现在的情况是主板的IO板信息收集进去主板的IOS数组中,并开通了异步传输,能传送到从板的IOS数组并显示出来,但现在发现主板的IO板送过来的信息好像被重复覆盖了(无论是主板的IO板0/IO板1还是其它IO板,只要一改变,从板的所有IO板显示都改变),下面是我的部分程序,请各位给出点意见,谢谢!
   void dealtime()
{
time0++;
if(time0==500)
        {
        time0=0;
        IO_read();
        RA6=1;
        RA7=1;       

    SPBRG=25;//初始化异步串行通信
    BRGH=1;
    SYNC=0;
    SPEN=1;
    TXIE=1;
    TX9=0;
    TXEN=1;
    TXREG=IOS[0];
        }
       
}

void interrupt ISR (void)//中断函数
{
        if(T0IF==1)
        {
        dealtime();
        T0IF=0;
        OPTION=0X01;
        INTCON=INTCON|0X20;
        TMR0=0X06;
        }
       
       
           if(RCIF==1)
        {  
                //RCIF=0;
                IOS[receive_count]=RCREG;
                RCREG=RCREG;
                receive_count++;
        //        RCEN=1;
                        if(receive_count>7)
                        {
                        RCEN=0;
                        receive_count=0;       
                        }
                        return;
        }
       
        if(RBIF==1)
        {
        KEYSCAN_PORTB();
        RBIF=0;       
        }

   if(TXIF==1)
    {
//        TXIF=0;
    TXREG=IOS[++sent_count];
    TXREG=TXREG;
//   sent_count++;
//   TXEN=1;
      if(sent_count>8)
      {
      sent_count=0;
      TXEN=0;
      }
    return;
    }

}

void Slave()
{
        TRISA=0X00;
        RCIE=0;
        RA6=1;
        RA7=0;       
       
        TRISB=0X00;
        PORTB=0X00;
       
        //开接收中断
        SPBRG=25;
        BRGH=1;
        SYNC=0;
        SPEN=1;
    RCIE=1;
    RX9=0;
        CREN=1;
}

准备是用中断查询,发送IOS【8】以及接收IOS[8]都是用中断,定时器定时一段时间后开始一次新的发送。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。