FDA (29.07.2005 15:28, просмотров: 1) ответил POV на Кто неаккуратнее, я или кейл?...
А я на PIC18 использую следующую функцию передачи байта... #define WaitTX() { while (!TRMT) CLRWDT(); }
void PutUSART (char b)
{
#ifdef RS485
TxRx = TXD;
#endif
TXREG = b;
WaitTX();
#ifdef RS485
TxRx = RXD;
#endif
USART_Error = 0;
}
Здесь байт загоняется в регистр передатчика и идёт ожидание самой передачи. Да, процессор в это время простаивает, но зато всё просто. Кроме того, при использовании RS-485 интерфейса не нужно заботится о ручном управлении направлением передачи.
А вот приём данных я веду по прерываниям. Протокол транспортного уровня у меня WAKE с 8-битным CRC, который вычисляется обычным методом (не табличным), за счёт чего экономится 256 байт памяти. Хотя последнее не особенно важно для проих процов - там памяти 32 кбайта!