Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программирование на ассемблере для МК ATmega128
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
AKV
Пишу программу для обмена информацией между МК и компьютером по интерфейсу RS-232.
Прием информации МК выполнен по прерыванию "прием завершен".
Для чтения содержимого буфера используется команда
lds r16,UDR1
(поскольку регистр UDR1 расположен в адресном пространстве дополнительных регистров ввода-вывода, работать с ним с помощью команд in, out евозможно).
При тестировании программы в отладчике после записи данных в регистр UDR1 и выполнении вышеуказанной команды, в регистр r16 записывается 0.
Скажите пожалуйста, почему это происходит и как нужно пересылать данные из UDR1, чтобы они правильно записывались в нужный регистр.
Палыч
ИМХО, fuse M103C остался запрограммирован
AKV
Цитата(Палыч @ Dec 5 2007, 13:41) *
ИМХО, fuse M103C остался запрограммирован

Тогда, подскажите, где в отладчике AVR Studio 4 можно сбросить этот бит.
Насколько мне известно Fuse Bit программируются при прошивке микроконтроллера.
При создании проекта и в самом начале программы выбрано .device ATmega128.
Палыч
Так Вы прогоняете программу в симуляторе AVRStudio?



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

lds r16,UDR1

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

C этими UDR при отладке - всегда путаница и косяки из-за того, что два регистра (на вывод и на ввод) имеею один адрес и имя.
adc
Странно, действительно не читается..
вот простой код-тест
Код
.device ATmega128             
.INCLUDE    "m128def.inc"      
.cseg            
.org 0x0000
ldi    r16,5
sts    UDR1,r16    
clr    r16
lds    r16,UDR1
nop
nop

Делаю останов, записываю регистр в ручную, всеравно... ноль. Очень странно. Раньше с таким не сталкивался..?!
AKV
Цитата(Палыч @ Dec 5 2007, 15:11) *
Так Вы прогоняете программу в симуляторе AVRStudio?



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

lds r16,UDR1

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

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


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

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


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



Кстати, если открыть окно Memory->Extended I/O, то по адресу 9С будет глухой ноль. При попытке туда, что-либо занести - получаем изменение UDR1 в окне Workspace->I/O, но в Memory->Extended I/O остается ноль...
adc
Цитата(Палыч @ 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)
Палыч
Цитата(adc @ Dec 5 2007, 17:44) *
Пробовал. Меняется и там и там. При записи в Workspace->I/O, меняется в Memory->Extended I/O и на оборот. (Вер:AVRStudio 4.13 SP1 Build 557)
Разработчики AVRStudio не только новые баги вносят, но и что-то исправляют. У меня AVRStudio 4.09
AKV
Палыч и adc, спасибо за помощь!
Буду считать, что это дефект отладчика и в железе программа не работает по другим причинам.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.