PIC18F452 Проблема формирования UART

каждый.

Я использую микроконтроллер PIC18F452. Я получаю данные по UART, кадрирую их, присоединяя дополнительные слова синхронизации и передаю, у меня возникают проблемы с последовательной отправкой слов синхронизации. Я хочу отправить слова, скажем... EA 09 C3 с данными. Теперь у меня есть этот код, написанный на MikroC:

int j=0;
SPBRG = 129;
TXSTA = 0b00100110;
RCSTA = 0b10010000;
while(1)
{
   if(j == 0)
   {
     TXREG = 0xEA;
   }
   else if(j == 1)
   {
     TXREG = 0x09;
   }
   else if(j == 2)
   {
     TXREG = 0xC3;
   }
   else
   {
    TXREG = RCREG;
   }
   while(!TRMT); // wait for whole data frame to be ready for transmission
  if(j == 100)
     j = 0; // reset j after 100 bytes
  else
     j++;
   }

Здесь происходит то, что слова синхронизации передаются, но не по порядку, а иногда также происходит дублирование байтов. Я хочу, чтобы j увеличивалось только после передачи одного байта, здесь я думаю, что j увеличивается независимо от передачи.

Благодарю в ожидании.

С уважением, Хасан


person Hassan    schedule 16.04.2013    source источник


Ответы (1)


Скрытый принцип передачи UART:

_ _ Добавляйте небольшую задержку между каждым отправляемым байтом _ _

Обратите внимание, что это секрет, не зависящий от скорости передачи данных;).

Например, 50 микросекунд.

Поскольку отправитель и получатель работают асинхронно, они тратят слишком много усилий на синхронизацию каждого байта при получении, и вы продолжаете их заполнять... Они просто зависают. Иногда отбрасывает байт, иногда отбрасывает его без очистки регистров приема, что приводит к дублированию байтов.

Поэтому, если скорость имеет решающее значение, сначала установите задержку отправки, например, 50 мс или более на байт, а затем, если это сработает, уменьшите ее, например, до 10 микросекунд. Продолжайте сужать его, пока он снова не начнет останавливаться, и желательно установить задержку в два раза больше этого предела для отказоустойчивости.

Надеюсь, не тороплюсь и не гонюсь за скоростью, иначе используйте другой канал связи, а не usart.

person Ihsan    schedule 19.04.2013