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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Сб авг 14, 2010 10:47:13

Сообщение 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 - все работает.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Ну так он и ждет приема символа командой

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

USART_receive:
    lds        temp2,UCSR0A    ;
    sbrs    temp2,(RXC0)    ;ждем приема символа (установка RXC)
    rjmp    USART_receive    ;
что еще надо то?
Я бы предпочел уйти в прерывания или (если это трудно) делать пропуск подпрограммы чтения если сброшен бит "приняты данные"
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Сб авг 14, 2010 10:47:13

Сообщение Alt.F4 »

Нет, я привел листинг функций.
В программе я сперва передаю, но на TXD-пусто, а вот если сначала принять хотя бы один символ, то передача работает! :shock:
бред какой-то
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Разделите задачи (закоментируйте прием) и отработайте передачу - потом остальное прикрутите.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Сб авг 14, 2010 10:47:13

Сообщение Alt.F4 »

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

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

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

rcall     uart_receive;
ldi     temp,0x31;
rcall     uart_transmit;
вот после приема, все передается! :cry:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Весь код можете приести? Больно странно это, а причина какая-нибудь банальнейшая...
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Сб авг 14, 2010 10:47:13

Сообщение 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 пробовал, не прокатывает.
Родился
Сообщения: 8
Зарегистрирован: Сб сен 25, 2010 20:46:36

Сообщение zuka86 »

Я бы такие проги на Си писал, было бы всё понятней
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Сб авг 14, 2010 10:47:13

Сообщение Alt.F4 »

По-моему когда на Си пишешь, то наоборот меньше понимаешь, что твориться в МК, это уже как компилятор откомпилирует. Да и код много больше по размеру выходит. Но вопрос не в этом...

Чуть позже:
Е-мана, это что за полтэргейс? написал чисто отправление (прием выключен), по TXD тишина, но как только я в HiperTerminal'е клацнул символ на отправление, МК сразу же начал отвечать!!!
max3232 не виноват, я передергивал его питание при передаче от МК, все отображается нормально.
Это что за приколы такие? :shock:
Родился
Сообщения: 9
Зарегистрирован: Сб сен 25, 2010 20:36:36

Сообщение maximkamiass »

Мне тоже легче на си. Больши проги на асме не пишут :wink:
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Сб авг 14, 2010 10:47:13

Сообщение Alt.F4 »

На чем писать, это уже личное решение каждого, мне бы проблему решить.

На след. день:
Твою мать, пятые сутки не сплю, а это HyperTerminal отказывается принимать символы до нажатия клавиши!!! :evil:
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

А вы гипертерминалу кнопочку нажали, чтобы он подключился к порту?
А то у него как раз при нажатии кнопок, при отключенном соединении, происходит подключение.
Изображение
Изображение
Вложения
ht2.png
(3.41 КБ) 855 скачиваний
ht1.png
(3.22 КБ) 681 скачивание
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

Вот у меня как-то давно тоже затуп был с этим гипертерминалом, а именно с кнопками соединения. :))) :))) :))) :))) :)))
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Родился
Сообщения: 3
Зарегистрирован: Вс сен 19, 2010 18:03:13

Сообщение e226329 »

А я putty использую. Удобнее.
Можно сессию для com порта сохранить и потом автоматически запускать ярлычком. Только в ярлычок параметр надо дописать

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

-load !AVR
А если еще на этот ярлычок горячую кнопку назначить, то вообще здорово получается.
Изображение
Вложения
pict1.JPG
(41.81 КБ) 771 скачивание
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Сб авг 14, 2010 10:47:13

Сообщение Alt.F4 »

терминал у меня всегда подключен. (Когда загружаешь сохраненное соединение коннект происходит автоматически).
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»