Появилась необходимость сделать конвертер скорости USARTa на авр. Например, принимает по 19600 передает по 2400 и наоборот.
Подскажите, как это осуществить, имея один USART на микросхеме. Может у кого-то есть исходники.
Зараннее спасибо
Не понятно, какие прерывания будут использоваться вместо стандартных уартовских, какие таймеры/счетчики будут задействованы при этом. Алгоритм работы и т.д.asteroid7 писал(а):vitaliy85
Вы опишите лучше что не получается, а не как сделать.
Исходные данные, которые вы привели, недостаточны для советов "как это сделать".
Это и есть ОДИН UARTvitaliy85 писал(а): Например, принимает по 19600 передает по 2400 и наоборот. Подскажите, как это осуществить, имея один USART на микросхеме.
Код: Выделить всё
; сегмент передачи от МК в сторону ПК (9600, 8-N-1, 104 мкс)
Tx movlw .9 ; 8+1, т.е + бит C из STATUS
movwf Reg_2
bcf STATUS,C ; подготовка стартового бита
m1 btfsc STATUS,C
goto bit1
goto bit0
bit1 bsf PORTA,1 ; передача единицы
call Pause
goto m2
bit0 bcf PORTA,1 ; передача нуля
call Pause
goto m2
m2 rrf Reg_3,F ; сдвиг вправо для передачи с младшего бита
decfsz Reg_2,F
goto m1
bsf PORTA,1 ; установка 1 - "режим ожидания"
call Pause
return
;delay = 95 machine cycles
Pause movlw .31
movwf Reg_1
wr decfsz Reg_1, F
goto wr
nop
return
Код: Выделить всё
; сегмент приема данных от ПК на стороне МК (9600, 8-N-1, 104 мкс)
Rx movlw .8 ; ровно 8 бит
movwf Reg_2
m1 btfsc PORTA,0 ; отслеживаем стартовый бит
goto m1
;delay = 52 machine cycles ; задержка на 104/2 мкс
Pause1 movlw .17 ; для выхода на середину бита
movwf Reg_1
wr1 decfsz Reg_1, F
goto wr1
m3 call Pause2
btfsc PORTA,0
goto bit1
goto bit0
bit1 bsf STATUS,C
goto m2
bit0 bcf STATUS,C
goto m2
m2 rrf Reg_3,F ; сдвиг вправо
decfsz Reg_2,F
goto m3
call Pause3
return
;delay = 89 machine cycles ; задержка с учётом
Pause2 movlw .29 ; ранее выполненных команд
movwf Reg_1
wr2 decfsz Reg_1, F
goto wr2
nop
return
;delay = 104 machine cycles ; задержка под 1 стоповый бит
Pause3 movlw .34
movwf Reg_1
wr3 decfsz Reg_1, F
goto wr3
nop
return
Присоединяюсь. А если нужно принимать данные из двух источников и передавать данные в два источника - можно применить мультиплексор. Это, если, конечно, неохота программный UART ваять...__Alexander писал(а):А переключить в регистре скорость религия не позволяет?
И вы туда же. Чел просит практические проверенные примерыDrWatson писал(а):У Atmel есть Апноуты ...
также заглянуть в папку \CVAVR\examples\2USART_LCD...
Сдвоенный программируемый последовательный USART