Страница 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-пусто, а вот если сначала принять хотя бы один символ, то передача работает! :shock:
бред какой-то

Re: USART ATmega48, до приема не передает символы

Добавлено: Сб сен 25, 2010 20:28:04
Meteor
Разделите задачи (закоментируйте прием) и отработайте передачу - потом остальное прикрутите.

Re: USART ATmega48, до приема не передает символы

Добавлено: Сб сен 25, 2010 21:00:38
Alt.F4

Код: Выделить всё

ldi     temp,0x31;
rcall     uart_transmit;
вот так, программа проходит фукцию uart_transmit не подвиснув и ничего не передав на TXD

Код: Выделить всё

rcall     uart_receive;
ldi     temp,0x31;
rcall     uart_transmit;
вот после приема, все передается! :cry:

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 не виноват, я передергивал его питание при передаче от МК, все отображается нормально.
Это что за приколы такие? :shock:

Re: USART ATmega48, до приема не передает символы

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

Re: USART ATmega48, до приема не передает символы

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

На след. день:
Твою мать, пятые сутки не сплю, а это HyperTerminal отказывается принимать символы до нажатия клавиши!!! :evil:

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 порта сохранить и потом автоматически запускать ярлычком. Только в ярлычок параметр надо дописать

Код: Выделить всё

-load !AVR
А если еще на этот ярлычок горячую кнопку назначить, то вообще здорово получается.
Изображение

Re: USART ATmega48, до приема не передает символы

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