А что, если FlagTx_3 изначально = 2 ? И ?
Отправлено
Юрий_СВ (213.5.199.158) 23 февраля 2011, г. 16:22
В ответ на:
Доработал так отправлено
Oleg_IT 23 февраля 2011, г. 15:42
1)Плохая привычка не задавать начальные значения переменных и флагов.
2) Это неверно:
UBRR0L = 14; // fosc = 13.824 MHz U2X = 0 BR = 57.6k
UBRR0H = 0;
Сначала UBRR0H, а потом UBRR0L (при чтении - наоборот).
"Writing UBRRL will trigger an immediate update of the baud rate prescaler."
3) UDR0 = Buff[0]; - в самый конец StartTX_3(void)
(после UCSR3B |= ((1 << TXEN3) | (1 << UDRIE3));)
4) Вы раньше вообще с прерываниями работали ? Что вы творите ?
Результат работы такой конструкции - непредсказуем.
void StartTX_0(void) {PORTF |= (1 << 0);}
ISR (USART0_UDRE_vect) {PORTF &=~ (1 << 0);}
void StartTX_3(void) {PORTF |= (1 << 1);}
ISR (USART3_UDRE_vect){PORTF &=~ (1 << 1);}
Хотя бы в StartTX делайте критическую секцию.
CLI
PORTF |= (1 << 1);
SEI