8051 UART скорость автоматического бода - PullRequest
0 голосов
/ 07 июня 2018

У меня есть устройство, которое непрерывно отправляет данные через UART.Я получаю данные на последовательный порт процессора 80C32 со скоростью 9600 бод. Как автоматически определять скорость передачи, чтобы я не менял значение TH1 для новой скорости передачи каждый раз.Функция инициализации последовательного порта:

void initSerial()
{
  TMOD&=0x0F;
  TMOD|=0x20;
  SCON=0xD0;
  TH1=0xFD;
  TR1 = 1; 
}

void serial(void) interrupt 4
{
   if(RI)
   {
      el=SBUF;
      RI=0;
      switch(el)
      {
         case 0x41:
            pom=1; // start of communication
            tmp=0;
            tail=0;
         break;
         case 0x42:
            tmp=1; // end of communication
            pom=0;
         break;
         default:
            if(pom==1 && tmp==0) // write in buffer
            {
               buff[tail]=el;
               tail++;
               if(tail==20)
                  tail=0;
            }
            else if(pom==0 && tmp==1)
            {
               buff[tail]=el;
               tail++;
               buff[tail]='\0';
            }
         break;
      }
   }
  //   RI=0;
}
...