Михаил Е. (21.09.2010 12:32, просмотров: 198) ответил z00f на Ну получается что по прерыванию
На самописце не смотрел, но вот так у меня работает
//*************** Передача байта ********************
#pragma vector=USART0_UDRE_vect
static __interrupt void USART0_UDRE() // прерывания
{
if(UART0Ptr->OutputNum--) // последний?
UDR0 = *(UART0Ptr->OutputPtr++); // передать байт
else
{
UDRIE0 = 0; // если все байты, запретить прерывания
TXCIE0 = 1; // разрешить прерывания по концу передачи
}
}
//************ Завершение передачи ******************
#pragma vector=USART0_TXC_vect
static __interrupt void USART0_TXC() // прерывания
{
UART0Ptr->DE = 0; // передатчик RS485 выключен
TXCIE0 = 0; // конец передачи, запретить прерывания
UART0Ptr->InputPtr = UART0Ptr->InputByffer; // указатель буфера на начало
UART0Ptr->OutputPtr = UART0Ptr->OutputBuffer; // указатель буфера на начало
RXEN0 = 1; // разрешен прием
RXCIE0 = 1; // разрешены прерывания от приемника UART 1
}