реклама на сайте
подробности

 
 
> USART ATmega48, не передает, до принятия символа
Alt.F4
сообщение Sep 24 2010, 12:26
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



МК не хочет осуществлять передачу до принятия любого символа. Причем не зависает, просто проходит подпрограмму передачи, и работает дальше.
Но если сперва принять хотя бы один символ, то передача работает.
Код
    clr        temp            ;
    sts        UCSR0B,temp        ;
    ldi        temp,0b00000110    ; 8бит, 1стоповый бит, нет четности, асинхронный режим
    sts        UCSR0C,temp        ;
    ldi        temp,0x80        ; сброс
    sts        CLKPR,temp        ; делителя
    ldi        temp,0x00        ; тактовой
    sts        CLKPR,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                        ;возврат из процедуры приема
В чем может быть дело?
Спасибо.

Сообщение отредактировал Alt.F4 - Sep 24 2010, 15:59
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
Alt.F4
сообщение Sep 24 2010, 16:49
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Прогоняю в AVR Studio - все работает. sad.gif

Сообщение отредактировал Alt.F4 - Sep 24 2010, 17:00
Go to the top of the page
 
+Quote Post
abi
сообщение Sep 25 2010, 01:15
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 10-10-05
Из: Казань
Пользователь №: 9 432



По вашему коду программа зацикливается в процедуре приема, ожидая установки флага RXC0, т.е. выход из процедуры возможен после приема байта.
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 25 2010, 06:51
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Да, я знаю. Вопрос в другом: если сперва делать передачу, то МК ничего не отсылает по USART, а вот если сперва прием, а затем передачу, то все работает.
Может это компилятор AVR Studio виноват?
Т.к. есть глюк с передачей символов из таблиц. Если таблица написана так:
Код
.db 'R','e','z','h','i','m',0x20,'"','O','h','r','a';
.db 'n','a','"',0x20,'a','k','t','i','r','o','v','a';
.db 'n','.'                               ;
то в HyperTerminal'е наблюдаю: Rezhim "OhАEЫ›ААP0ч*™*˜
А если так:
Код
.db 'R','e','z','h','i','m',0x20,'"','O','h';
.db 'r','a','n','a','"',0x20,'a','k','t','i';
.db 'v','i','r','o','v','a','n','.'   ;
то уже почему-то: RezhАEЫ›ААP0ч*™*˜B™B˜
Проблема решается добалвением 3-х пустых строк между таблицами. unsure.gif
з.ы. и еще понять не могу, почему когда загружаю прошивку в UniProf, он в окне EEPROM грузит какие-то данные и шьет их в МК. Ведь эта же память по программе пуста!
Спасибо.
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Sep 25 2010, 09:05
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



А какой драйвер RS-232 стоит? Может он находится в спячке пока не примет байт.
У некоторых есть режим типа shutdown (точно не помню)
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 25 2010, 09:50
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Цитата
А какой драйвер RS-232 стоит?
max3232, но с ним все в порядке 100%
Я думаю может компилятор глючит. Бывает такое?
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 25 2010, 15:56
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Пробовал передавать по установке TXC0 из UCSR0A - тоже самое.
Нашел такую же тему в "телесиське", но вопрос так и не решили...

Сообщение отредактировал Alt.F4 - Sep 25 2010, 15:56
Go to the top of the page
 
+Quote Post
Deka
сообщение Sep 25 2010, 17:28
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 18-07-06
Из: Сочи
Пользователь №: 18 890



Делал девайс, который при включении отсылает версию фирмари в терминал. Т.е. контроллер отсылает инфу первым. Всё работало. Никаких граблей замечено небыло. Правда контроллер был мега8.
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 25 2010, 18:34
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Цитата
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
а на TXD тишина, но стоит отправить символ, и понеслась... crying.gif
з.ы. можно как-то программно симулировать прием по уарт? установку RXC0 пробовал, не прокатывает.

Сообщение отредактировал Alt.F4 - Sep 25 2010, 18:42
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Sep 25 2010, 18:44
Сообщение #10


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(Alt.F4 @ Sep 25 2010, 22:34) *
а на TXD тишина, но стоит отправить символ, и понеслась... crying.gif
з.ы. можно как-то программно симулировать прием по уарт? установку RXC0 пробовал, не прокатывает.


Эй, вот _так_ делать не надо:

rjmp PC+2 ;
lds temp,UDR0 ;читаем

Потому как LDS - это два слова, и rjmp попадает в середину команды. Знакомые грабельки, наступаем иногда wink.gif
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 25 2010, 19:12
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Смысл от этого все равно какбе не меняется... sad.gif

Чуть позже:
Е-мана, это что за полтэргейс? написал чисто отправление (прием выключен), по TXD тишина, но как только я в HiperTerminal'е клацнул символ на отправление, МК сразу же начал отвечать!!!
max3232 не виноват, я передергивал его питание при передаче от МК, все отображается нормально.
Это что за приколы такие? sad.gif

Сообщение отредактировал Alt.F4 - Sep 25 2010, 19:40
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 26 2010, 06:53
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Твою мать, пятые сутки не сплю, а это HyperTerminal отказывается принимать символы до нажатия клавиши!!! angry.gif
Go to the top of the page
 
+Quote Post
Александр77
сообщение Sep 26 2010, 16:51
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 608
Регистрация: 10-07-09
Из: Дубна, Московская область
Пользователь №: 51 111



С каких пор гипертерминал не принимает до нажатия?
У меня он все глотает...
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 26 2010, 17:01
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Цитата
С каких пор гипертерминал не принимает до нажатия?
У меня он все глотает...
Без понтия, раньше тоже вроде работало нормально. Как узнал: МК значит молчит, отсоединил max3232 от МК, клацнул в гипертерминале, подсоединяю к МК, все принимает blink.gif

Сообщение отредактировал Alt.F4 - Sep 26 2010, 17:01
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Sep 27 2010, 04:12
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Тогда попробуй использовать не ГиперТерминал, а какую-нибудь другую прогу. В свое время я сам писал проги по обмену ПК и процов
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 04:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.04608 секунд с 7
ELECTRONIX ©2004-2016