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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Простой вопрос по USART на attiny2313
Alt.F4
сообщение Aug 29 2010, 20:18
Сообщение #31


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

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



Извиняюсь за глупый вопрос. Я удалил сообщение.
Все дело оказалось в командах, вместо rcall, писал rjmp в подпрограмме. =(
Вот, что бывает, если с утра до вечера без перекура насиловать мозг программированием...

Сообщение отредактировал Alt.F4 - Aug 30 2010, 17:22
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 5 2010, 17:01
Сообщение #32


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

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



Из-за нехватки памяти программ, приобрел ATmega48.
Запустил в симуляторе программу и наткнулся на ошибку:
error: Operand 1 out of range: 0xc0
в функции USART_transmit. Причем она скопирована с даташита. Поиск ни к чему не привел...
Код
USART_transmit:
    sbis    UCSR0A,UDRE0  ;  <--error: Operand 1 out of range: 0xc0
    rjmp    USART_transmit;
    out    UDR0,temp      ;  <--error: Operand 1 out of range: 0xc6
    ret                   ;
В чем может быть дело?
Спасибо.

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


Гуру
******

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



Цитата(Alt.F4 @ Sep 5 2010, 21:01) *
В чем может быть дело?

Ну да, регистры USART в этом семействе недоступны для in/out, используйте lds/sts.
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 5 2010, 17:41
Сообщение #34


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

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



Код
USART_transmit:
    lds    temp,UCSR0A;
    sbrs    temp,5    ;ждем пока содержимое из UDR0 перегрузится в сдвиговый регистр
    rjmp    USART_transmit;
    sts    UDR0,temp    ;отправляем
    ret                ;возврат из процедуры отправки
Правильно написал?
з.ы. в даташите приведены неверные примеры wacko.gif

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


Гуру
******

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



Цитата(Alt.F4 @ Sep 5 2010, 21:41) *
Правильно написал?

Вроде да, хотя правильнее использовать не номер бита, а символическое имя.
Пардон, а сохранять temp перед поллингом статуса кто будет ? А то так и будет передавать вместо требуемых данных содержимое UCSR0A...
Цитата
з.ы. в даташите приведены неверные примеры wacko.gif

Да, но там есть и сноска, что при обращении к портам в расширенном пространстве i/o надо заменить in/out на lds/sts.

Сообщение отредактировал rx3apf - Sep 5 2010, 17:51
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 5 2010, 18:04
Сообщение #36


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

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



rx3apf, спасибо огромное cheers.gif .
з.ы. но даташит ИМХО составлен неверно.

Сообщение отредактировал Alt.F4 - Sep 5 2010, 18:04
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 6 2010, 07:18
Сообщение #37


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

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



Код
USART_receive:
    lds        temp2,UCSR0A    ;
    sbrs    temp2,(RXC0)    ;ждем приема символа (установка RXC)
    rjmp    USART_receive    ;
    lds        temp,UDR0        ;читаем
    ret                        ;возврат из процедуры приема
Прогоняю в avr_studio и данные из UDR0 не копируются в temp. После lds temp,UDR0; temp и UDR0 сбрасываются в 0х00.
В чем может быть проблема?
Спасибо.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Sep 6 2010, 09:46
Сообщение #38


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Alt.F4 @ Sep 6 2010, 11:18) *
В чем может быть проблема?
Спасибо.


Не мучайтесь - в симмуляторе.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 11 2010, 09:15
Сообщение #39


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

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



Снова косяк c USART: cимволы из одной таблицы памяти программ МК почему-то передает неверно, причем только половину. Другие же таблицы передаются без ошибок.
Может это в адресации? Т.к. если таблица написана так:
Код
.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˜

з.ы. и еще понять не могу, почему когда загружаю прошивку в UniProf, он в окне EEPROM грузит какие-то данные и шьет их в МК. Ведь эта же память по программе пуста!
Спасибо.

Сообщение отредактировал Alt.F4 - Sep 11 2010, 09:16
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 11 2010, 15:58
Сообщение #40


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

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



Странно, но проблема оказалось в том, что между названием таблицы и предыдущей строкой не было пустой строки!!!
Правда вопрос про EEPROM все еще не раскрыт cranky.gif
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Sep 21 2010, 14:54
Сообщение #41


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

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



Код
Start:
    ldi        temp,0b00011000; установка TXEN RXEN
    sts        UCSR0B,temp; USART вкл    
    rcall    123; там мы отправляем по USART 123
..........
тут мы принимаем по USART и передаем, все работает.
затем нажали на кнопку и выключаемся
..........
end:
    clr        temp; снятие TXEN RXEN
    sts        UCSR0B,temp; USART выкл    
rjmp  Start
Проблема: символы 123 отправляются не с первого раза! Необходимо сначала посетить "end" и только со второго "Start" символы 123 передаются. Хотя и с первого раза в середине программы USART работает. В чем может быть проблема?
Еще прикол с таблицами из поста 39 остался.
Может это avr_studio зажигает?
Спасибо.

Нашел причину: необходимо сначала принять хотя бы один символ, только после этого МК будет осуществлять передачу. Почему так? ph34r.gif

Сообщение отредактировал Alt.F4 - Sep 21 2010, 15:19
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th June 2025 - 16:31
Рейтинг@Mail.ru


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