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

 
 
> Программирование на ассемблере для МК ATmega128, Требуется консультация
AKV
сообщение Dec 5 2007, 10:27
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 5-12-07
Пользователь №: 32 990



Пишу программу для обмена информацией между МК и компьютером по интерфейсу RS-232.
Прием информации МК выполнен по прерыванию "прием завершен".
Для чтения содержимого буфера используется команда
lds r16,UDR1
(поскольку регистр UDR1 расположен в адресном пространстве дополнительных регистров ввода-вывода, работать с ним с помощью команд in, out евозможно).
При тестировании программы в отладчике после записи данных в регистр UDR1 и выполнении вышеуказанной команды, в регистр r16 записывается 0.
Скажите пожалуйста, почему это происходит и как нужно пересылать данные из UDR1, чтобы они правильно записывались в нужный регистр.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 10)
Палыч
сообщение Dec 5 2007, 10:41
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



ИМХО, fuse M103C остался запрограммирован
Go to the top of the page
 
+Quote Post
AKV
сообщение Dec 5 2007, 11:14
Сообщение #3





Группа: Новичок
Сообщений: 5
Регистрация: 5-12-07
Пользователь №: 32 990



Цитата(Палыч @ Dec 5 2007, 13:41) *
ИМХО, fuse M103C остался запрограммирован

Тогда, подскажите, где в отладчике AVR Studio 4 можно сбросить этот бит.
Насколько мне известно Fuse Bit программируются при прошивке микроконтроллера.
При создании проекта и в самом начале программы выбрано .device ATmega128.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Dec 5 2007, 12:11
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Так Вы прогоняете программу в симуляторе AVRStudio?



Справа в Workspace->I/O разверните USART1 и измените UDR1 непосредственно перед выполнением команды

lds r16,UDR1

Т.е. ставите на эту команду останов (breakpoint), когда симулятор дошагает до этой команды и остановится - меняете UDR1 и продолжаете выполнение программы (Run или Step).

C этими UDR при отладке - всегда путаница и косяки из-за того, что два регистра (на вывод и на ввод) имеею один адрес и имя.
Go to the top of the page
 
+Quote Post
adc
сообщение Dec 5 2007, 12:21
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



Странно, действительно не читается..
вот простой код-тест
Код
.device ATmega128             
.INCLUDE    "m128def.inc"      
.cseg            
.org 0x0000
ldi    r16,5
sts    UDR1,r16    
clr    r16
lds    r16,UDR1
nop
nop

Делаю останов, записываю регистр в ручную, всеравно... ноль. Очень странно. Раньше с таким не сталкивался..?!


--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
Go to the top of the page
 
+Quote Post
AKV
сообщение Dec 5 2007, 13:05
Сообщение #6





Группа: Новичок
Сообщений: 5
Регистрация: 5-12-07
Пользователь №: 32 990



Цитата(Палыч @ Dec 5 2007, 15:11) *
Так Вы прогоняете программу в симуляторе AVRStudio?



Справа в Workspace->I/O разверните USART1 и измените UDR1 непосредственно перед выполнением команды

lds r16,UDR1

Т.е. ставите на эту команду останов (breakpoint), когда симулятор дошагает до этой команды и остановится - меняете UDR1 и продолжаете выполнение программы (Run или Step).

C этими UDR при отладке - всегда путаница и косяки из-за того, что два регистра (на вывод и на ввод) имеею один адрес и имя.


Вообще-то я так уже много раз делал и получал описанный выше результат.
Go to the top of the page
 
+Quote Post
adc
сообщение Dec 5 2007, 13:23
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



А из нулевого регистра данных все нормально читается (также записываю ручками после останова):
Код
.device ATmega128         ;
.INCLUDE    "m128def.inc"  ;
.cseg            
.org 0x0000
ldi    r16,5
out    UDR0,r16    
clr    r16
in    r16,UDR0//перед выполнением в симуляторе записываю значение в UDR0
nop

странно?!


--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
Go to the top of the page
 
+Quote Post
Палыч
сообщение Dec 5 2007, 13:41
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(adc @ Dec 5 2007, 16:23) *
А из нулевого регистра данных все нормально читается (также записываю ручками после останова) странно?!


Да, действительно: для UDR0 - работает, а для UDR1 - нет. Ну, чтож... Еще один баг симулятора AVRStudio... Это лишнее подтверждение того, что отлаживаться лучше всего - в железе



Кстати, если открыть окно Memory->Extended I/O, то по адресу 9С будет глухой ноль. При попытке туда, что-либо занести - получаем изменение UDR1 в окне Workspace->I/O, но в Memory->Extended I/O остается ноль...
Go to the top of the page
 
+Quote Post
adc
сообщение Dec 5 2007, 14:44
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



Цитата(Палыч @ Dec 5 2007, 16:41) *
Кстати, если открыть окно Memory->Extended I/O, то по адресу 9С будет глухой ноль. При попытке туда, что-либо занести - получаем изменение UDR1 в окне Workspace->I/O, но в Memory->Extended I/O остается ноль...

Пробовал. Меняется и там и там. При записи в Workspace->I/O, меняется в Memory->Extended I/O и на оборот. (Вер:AVRStudio 4.13 SP1 Build 557)


--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
Go to the top of the page
 
+Quote Post
Палыч
сообщение Dec 5 2007, 15:12
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(adc @ Dec 5 2007, 17:44) *
Пробовал. Меняется и там и там. При записи в Workspace->I/O, меняется в Memory->Extended I/O и на оборот. (Вер:AVRStudio 4.13 SP1 Build 557)
Разработчики AVRStudio не только новые баги вносят, но и что-то исправляют. У меня AVRStudio 4.09
Go to the top of the page
 
+Quote Post
AKV
сообщение Dec 6 2007, 05:21
Сообщение #11





Группа: Новичок
Сообщений: 5
Регистрация: 5-12-07
Пользователь №: 32 990



Палыч и adc, спасибо за помощь!
Буду считать, что это дефект отладчика и в железе программа не работает по другим причинам.
Go to the top of the page
 
+Quote Post

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

 


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


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