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

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

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

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

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

Сообщение Meteor »

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

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

USART_receive:
    lds        temp2,UCSR0A    ;
    sbrs    temp2,(RXC0)    ;ждем приема символа (установка RXC)
    rjmp    USART_receive    ;

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

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

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

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

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

Сообщение Meteor »

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

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

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

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

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

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

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

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

Сообщение Meteor »

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

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

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

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

Сообщение zuka86 »

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

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

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

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

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

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

Сообщение maximkamiass »

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

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

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

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

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

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

Сообщение Kavka »

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

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

Сообщение DX168B »

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

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

Сообщение e226329 »

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

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

-load !AVR

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

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

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

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

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