Страница 1 из 1
USART ATmega48, до приема не передает символы
Добавлено: Сб сен 25, 2010 20:07:59
Alt.F4
МК не хочет осуществлять передачу до принятия любого символа. Причем не зависает, просто проходит подпрограмму передачи, и работает дальше.
Но если сперва принять хотя бы один символ, то передача работает.
Код: Выделить всё
clr temp ;
sts UCSR0B,temp ;
ldi temp,0b00000110 ; 8бит, 1стоповый бит, нет четности, асинхронный режим
sts UCSR0C,temp ;
clr temp ;
sts UBRR0H,temp ;
ldi temp,29 ; ubrr=29
sts UBRR0L,temp ; 9600 бод/сек
ldi temp,0b00011000 ; установка TXEN RXEN
sts UCSR0B,temp ; USART вкл
Код: Выделить всё
USART_transmit:
lds temp2,UCSR0A ;
sbrs temp2,(UDRE0) ;ждем пока содержимое из UDR0 перегрузится в сдвиговый регистр
rjmp USART_transmit ;
sts UDR0,temp ;отправляем
ret ;возврат из процедуры отправки
USART_receive:
lds temp2,UCSR0A ;
sbrs temp2,(RXC0) ;ждем приема символа (установка RXC)
rjmp USART_receive ;
lds temp,UDR0 ;читаем
ret ;возврат из процедуры приема
В чем может быть дело?
Спасибо.
p.s. прогоняю в AVR Studio - все работает.
Re: USART ATmega48, до приема не передает символы
Добавлено: Сб сен 25, 2010 20:17:34
Meteor
Ну так он и ждет приема символа командой
Код: Выделить всё
USART_receive:
lds temp2,UCSR0A ;
sbrs temp2,(RXC0) ;ждем приема символа (установка RXC)
rjmp USART_receive ;
что еще надо то?
Я бы предпочел уйти в прерывания или (если это трудно) делать пропуск подпрограммы чтения если сброшен бит "приняты данные"
Re: USART ATmega48, до приема не передает символы
Добавлено: Сб сен 25, 2010 20:21:57
Alt.F4
Нет, я привел листинг функций.
В программе я сперва передаю, но на TXD-пусто, а вот если сначала принять хотя бы один символ, то передача работает!
бред какой-то
Re: USART ATmega48, до приема не передает символы
Добавлено: Сб сен 25, 2010 20:28:04
Meteor
Разделите задачи (закоментируйте прием) и отработайте передачу - потом остальное прикрутите.
Re: USART ATmega48, до приема не передает символы
Добавлено: Сб сен 25, 2010 21:00:38
Alt.F4
вот так, программа проходит фукцию uart_transmit не подвиснув и ничего не передав на TXD
Код: Выделить всё
rcall uart_receive;
ldi temp,0x31;
rcall uart_transmit;
вот после приема, все передается!

Re: USART ATmega48, до приема не передает символы
Добавлено: Сб сен 25, 2010 21:06:09
Meteor
Весь код можете приести? Больно странно это, а причина какая-нибудь банальнейшая...
Re: USART ATmega48, до приема не передает символы
Добавлено: Сб сен 25, 2010 21:22:43
Alt.F4
Весь не буду приводить, там 1500строк =))
Я сразу даже и не заметил этого глюка. Сначала всегда ждал приема символов и дальше работал, а тут потребовалось сперва послать и косяк...
Сейчас написал, на TXD тишина, но стоит нажать хоть одну клавишу, и понеслась
Код: Выделить всё
ldi temp,0b00011000 ; установка TXEN RXEN
sts UCSR0B,temp ; USART вкл
start1:
lds temp2,UCSR0A ;
sbrs temp2,(RXC0) ;ждем приема символа (установка RXC)
rjmp PC+2 ;
lds temp,UDR0 ;читаем
ldi temp,0x31 ;
lds temp2,UCSR0A ;
sbrs temp2,(UDRE0) ;ждем пока содержимое из UDR0 перегрузится в сдвиговый регистр
rjmp start1 ;
sts UDR0,temp ;отправляем
rjmp start1
з.ы. можно как-то программно симулировать прием по уарт? установку RXC0 пробовал, не прокатывает.
Re: USART ATmega48, до приема не передает символы
Добавлено: Сб сен 25, 2010 21:58:17
zuka86
Я бы такие проги на Си писал, было бы всё понятней
Re: USART ATmega48, до приема не передает символы
Добавлено: Сб сен 25, 2010 22:09:50
Alt.F4
По-моему когда на Си пишешь, то наоборот меньше понимаешь, что твориться в МК, это уже как компилятор откомпилирует. Да и код много больше по размеру выходит. Но вопрос не в этом...
Чуть позже:
Е-мана, это что за полтэргейс? написал чисто отправление (прием выключен), по TXD тишина, но как только я в HiperTerminal'е клацнул символ на отправление, МК сразу же начал отвечать!!!
max3232 не виноват, я передергивал его питание при передаче от МК, все отображается нормально.
Это что за приколы такие?

Re: USART ATmega48, до приема не передает символы
Добавлено: Сб сен 25, 2010 23:02:44
maximkamiass
Мне тоже легче на си. Больши проги на асме не пишут

Re: USART ATmega48, до приема не передает символы
Добавлено: Сб сен 25, 2010 23:21:11
Alt.F4
На чем писать, это уже личное решение каждого,
мне бы проблему решить.
На след. день:
Твою мать, пятые сутки не сплю, а это HyperTerminal отказывается принимать символы до нажатия клавиши!!!

Re: USART ATmega48, до приема не передает символы
Добавлено: Пн сен 27, 2010 12:28:39
Kavka
А вы гипертерминалу кнопочку нажали, чтобы он подключился к порту?
А то у него как раз при нажатии кнопок, при отключенном соединении, происходит подключение.

Re: USART ATmega48, до приема не передает символы
Добавлено: Пн сен 27, 2010 13:10:16
DX168B
Re: USART ATmega48, до приема не передает символы
Добавлено: Пн сен 27, 2010 22:36:04
e226329
А я putty использую. Удобнее.
Можно сессию для com порта сохранить и потом автоматически запускать ярлычком. Только в ярлычок параметр надо дописать
А если еще на этот ярлычок горячую кнопку назначить, то вообще здорово получается.

Re: USART ATmega48, до приема не передает символы
Добавлено: Вт сен 28, 2010 22:52:13
Alt.F4
терминал у меня всегда подключен. (Когда загружаешь сохраненное соединение коннект происходит автоматически).