|
USART ATmega48, не передает, до принятия символа |
|
|
|
Sep 24 2010, 12:26
|
Профессионал
    
Группа: Свой
Сообщений: 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
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Sep 25 2010, 01:15
|
Участник

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

|
По вашему коду программа зацикливается в процедуре приема, ожидая установки флага RXC0, т.е. выход из процедуры возможен после приема байта.
|
|
|
|
|
Sep 25 2010, 06:51
|
Профессионал
    
Группа: Свой
Сообщений: 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-х пустых строк между таблицами. з.ы. и еще понять не могу, почему когда загружаю прошивку в UniProf, он в окне EEPROM грузит какие-то данные и шьет их в МК. Ведь эта же память по программе пуста! Спасибо.
|
|
|
|
|
Sep 25 2010, 09:50
|
Профессионал
    
Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256

|
Цитата А какой драйвер RS-232 стоит? max3232, но с ним все в порядке 100% Я думаю может компилятор глючит. Бывает такое?
|
|
|
|
|
Sep 25 2010, 18:34
|
Профессионал
    
Группа: Свой
Сообщений: 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 тишина, но стоит отправить символ, и понеслась...  з.ы. можно как-то программно симулировать прием по уарт? установку RXC0 пробовал, не прокатывает.
Сообщение отредактировал Alt.F4 - Sep 25 2010, 18:42
|
|
|
|
|
Sep 25 2010, 18:44
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(Alt.F4 @ Sep 25 2010, 22:34)  а на TXD тишина, но стоит отправить символ, и понеслась...  з.ы. можно как-то программно симулировать прием по уарт? установку RXC0 пробовал, не прокатывает. Эй, вот _так_ делать не надо: rjmp PC+2 ; lds temp,UDR0 ;читаем Потому как LDS - это два слова, и rjmp попадает в середину команды. Знакомые грабельки, наступаем иногда
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|