标题: STC8系列单片机RS485偶校验通信程序经常收发不成功? [打印本页]

作者: 归刃    时间: 2023-5-8 10:16
标题: STC8系列单片机RS485偶校验通信程序经常收发不成功?
经常收发不成功 代码如下
sfr P3M0=0xB2;
sfr P3M1=0xB1;
unsigned char var0,var;
void main(void)
{

  init();  
  while(1){}

}

void delay_ms(unsigned char ms)
{
        unsigned int i;
        do{
                i = MAIN_Fosc / 10000;
                while(--i);
        }while(--ms);
}

void init(void)
{
  P_SW2=0x80;
  XOSCCR=0xc0;
  while(!(XOSCCR&1));
  CLKDIV=0x00;
  CKSEL=0x01;
  P_SW2=0x00;

  P3M0=64;

  IE=0x00;     //关闭所有中断

  S2CON=0X90;

  T2L=(65536-FOSC/19200/4);
  T2H=(65536-FOSC/19200/4)>>8;
  AUXR=0X14;

  RW485 = LOW;

  IE2=0x01;//使能串口2中断
  EA=1;
}

void SendChar232(UCHAR senddata)
{
  RW485 = HIGH;
  var0 =0;
var += var0;
  P ? (S2CON |= 0x08) : (S2CON &= ~0x08);
  S2BUF=senddata;
  while(!(S2CON&2));
  S2CON&=(~2);
  delay_ms(50);
  RW485 = LOW;
}


void USART2_ISR(void) interrupt 8 using 1
{
        unsigned char redata;
  unsigned char i=0;
  if(S2CON&1)
        {
    var0 =0;
    redata = S2BUF;
    var = redata;
    var += var0;
    if((S2CON & 0x04) == P)
    {
      SendChar232(0x41);
    }
    S2CON&=(~1);
  }
}

作者: 归刃    时间: 2023-5-8 19:13
接收1个字节正常 2个以上就出现乱码
作者: 人中狼    时间: 2023-5-8 19:50
485是半双工的
作者: yzwzfyz    时间: 2023-5-9 09:20
双方串行时序时钟或相伴偏差较大的,会出现前个把字节OK,后面就错了。
作者: coody_sz    时间: 2023-5-9 10:33
485是半双工的,切换收发模式时,给一点点时间稳定。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1