|
Простой вопрос по USART на attiny2313 |
|
|
|
Sep 5 2010, 17:01
|
Профессионал
    
Группа: Свой
Сообщений: 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
|
|
|
|
|
Sep 5 2010, 17:49
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(Alt.F4 @ Sep 5 2010, 21:41)  Правильно написал? Вроде да, хотя правильнее использовать не номер бита, а символическое имя. Пардон, а сохранять temp перед поллингом статуса кто будет ? А то так и будет передавать вместо требуемых данных содержимое UCSR0A... Цитата з.ы. в даташите приведены неверные примеры  Да, но там есть и сноска, что при обращении к портам в расширенном пространстве i/o надо заменить in/out на lds/sts.
Сообщение отредактировал rx3apf - Sep 5 2010, 17:51
|
|
|
|
|
Sep 6 2010, 07:18
|
Профессионал
    
Группа: Свой
Сообщений: 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. В чем может быть проблема? Спасибо.
|
|
|
|
|
Sep 11 2010, 09:15
|
Профессионал
    
Группа: Свой
Сообщений: 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
|
|
|
|
|
Sep 21 2010, 14:54
|
Профессионал
    
Группа: Свой
Сообщений: 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 зажигает? Спасибо. Нашел причину: необходимо сначала принять хотя бы один символ, только после этого МК будет осуществлять передачу. Почему так?
Сообщение отредактировал Alt.F4 - Sep 21 2010, 15:19
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|