Цитата(Lost_Viking @ Feb 3 2013, 13:21)

Кстати, стоит ли использовать прерывания от ацп в данном случае?
Для отправки и приема данных использую такую конструкцию:
while ( !(UCSRA & (1<<RXC))
while ( !(UCSRA & (1<<UDRE))
Соответственно, пока условия истинны программа стоит и ничего не делает. Если использовать прерывание от АЦП, то в это время можно считывать результаты от АЦП. Но часто, чаще чем передаются данные, считывать нет смысла. Если не использовать прерывания, то что-то не пойму... Что же получится... Как правильней?
Правильно работать по прерываниям, и использовать аппаратный USART. Программа крутится в пустом цикле, пришло прерывание от АЦП, процессор принял данные сложил в память.
А вот дальше начинается самое интересное. Откуда USART узнает где брать пакет или следующий байт? Вот и пускай не сидит в пустом цикле, а отслеживает указатели на массивы.
Если данных нет, тогда пустой цикл, если данные есть, тогда процессор запихивает байт в регистр передатчика.
Короче основная программа должна выполнять две функции, принимать данные от АЦП, заполнять этими данными массив данных, в простонародье FIFO, и отправлять данные по USART из этого же массива. Заполнение массива идет по прерываниям от АЦП, отгрузка данных тоже по прерываниям от USART по мере готовности передатчика.
Ну вот и получаем целую программу. Отработка двух типов прерываний и работа с указателями FIFO.
На слух это все воспринять безусловно трудно. Поэтому начните, Вам предстоит долгий гемор, но оно того стоит
улыбаемся ...